1. 문자열 섞기
문제 설명
길이가 같은 두 문자열 str1과 str2가 주어집니다.
두 문자열의 각 문자가 앞에서부터 서로 번갈아가면서 한 번씩 등장하는 문자열을 만들어 return 하는 solution 함수를 완성해주세요.
🤔 어떻게 접근할까?
일단 두개가 하나씩 같이 나오려면 두 input 을 묶어서 하나씩 나오게 하면 되지 않나!
1. zip 으로 입력받은 두 문자열을 묶기
2. 반복문으로 하나씩 꺼내오기
//첫번째 시도
def solution(str1, str2):
result = []
for s1, s2 in zip(str1, str2):
result.append(s1)
result.append(s2)
result.join('')
return result
그런데 결과값이 이렇게 나왔다.
생각해보니까.. 리스트에서 문자열은 따옴표로 구분된다는 것이 생각났다.
바보 ㅠㅠ
어떻게 해결할까...
두가지로 해결해보았다.
1. join 으로 리스트 내의 따옴표를 없애기
2. 리스트가 아니라 zip 으로 묶고 그냥 더해버리면 그만이다.
# 1. join 으로 리스트내의 따옴표 없애기
def solution(str1, str2):
result = ""
for s1, s2 in zip(str1, str2):
result += s1 + s2
return ''.join(result)
join 연산자
-매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수
구분자에 공백을 넣으면 떨어져있는 요소들이 붙어서 출력이 된다.
구분자.join(리스트)
예제
bread=['식빵','맘모스빵','계란빵']
result=".".join(bread)
print(result)
>> 식빵.맘모스빵.계란빵
result2="_".join(bread)
print(result2)
>> 식빵_맘모스빵_계란빵
두번째 방법은 리스트로 넣지 않고 그냥 묶어버렸다.
리스트에 들어가면서 따옴표로 생기는 것이 문제였기 때문에 리스트 자체에 넣지 않았다.
그리고 여기서는 str1, str2가 문자열이기 때문에 '+' 를 써도 그냥 이어붙여진다.
# 2. 리스트로 넣지 말고 그냥 묶어버리기
def solution(str1, str2):
result = ""
for s1, s2 in zip(str1, str2):
result += s1 + s2
return result
2. 문자 리스트를 문자열로 변환하기
문제 설명
문자들이 담겨있는 배열 arr가 주어집니다. arr의 원소들을 순서대로 이어붙인 문자열을 return 하는 solution 함수를 작성해주세요.
def solution(arr):
return ''.join(arr)
3. 문자열 곱하기
문제 설명
문자열 my_string과 정수 k가 주어질 때, my_string을 k번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요.
def solution(my_string, k):
answer = my_string * k
return answer
4. 더 크게 합치기
문제설명
연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.
- 12 ⊕ 3 = 123
- 3 ⊕ 12 = 31
양의 정수 a와 b가 주어졌을 때, a ⊕ b와 b ⊕ a 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요.
단, a ⊕ b와 b ⊕ a가 같다면 a ⊕ b를 return 합니다.
첫번째 시도
def solution(a, b):
if a>=b:
answer=zip(a,b)
else:
answer=zip(b,a)
return answer
정수형 type 은 반복가능한 객체 (iterable) 이 아니라는 오류이다.
그럼 zip 을 좀 더 자세히 알아보자
zip() 함수
iterable, 즉 순회가능한 객체를 인자로 받고 각 자료형의 각각의 요소로 나눈 후 인덱스까지 잘라서
리스트로 반환해준다. zip은 두 개의 리스트를 서로 묶어줄 때 사용한다.
def solution(a, b):
answer = int(str(a)+str(b))
answer2 = int(str(b)+str(a))
if answer>=answer2:
return answer
else:
return answer2
int 는 정수형이기 때문에 둘을 더해버리면 sum 의 결과값이 나온다.
따라서 문자열로 바꿔주면 둘을 그냥 이어붙이게 될 것이다.
5. 두 수의 연산값 비교하기
문제 설명
연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를들면 다음과 같습니다.
- 12 ⊕ 3 = 123
- 3 ⊕ 12 = 312
양의 정수 a와 b가 주어졌을 때, a ⊕ b와 2 * a * b 중 더 큰 값을 return하는 solution 함수를 완성해 주세요.
단, a ⊕ b와 2 * a * b가 같으면 a ⊕ b를 return 합니다.
def solution(a, b):
answer = int(str(a)+str(b))
answer2 = 2*a*b
if answer>=answer2:
return answer
else:
return answer2
'Algorithm' 카테고리의 다른 글
[Python] 프로그래머스 트레이닝 챌린지 D5 (0) | 2024.07.21 |
---|---|
[Python] 프로그래머스 트레이닝 챌린지 D4 (0) | 2024.07.18 |
[Python] 프로그래머스 트레이닝 챌린지 D2 (0) | 2024.07.16 |
[Python] 프로그래머스 트레이닝 챌린지 D1 (0) | 2024.07.15 |
[Python] 프로그래머스 - 배열의 길이에 따라 다른 연산하기 (0) | 2024.07.15 |