Day 3 Coding Test Note
Day3) 프로그래머스 코딩테스트: 문자열 합치기와 join 정리
오늘은 프로그래머스 코딩 기초 트레이닝을 풀면서 헷갈렸던 문자열 처리 문제들을 정리했습니다. 문제 자체는 어렵지 않았지만, 직접 코드를 쓰다 보니 answer = 0으로 시작해도 되는지, return을 어디에 둬야 하는지, join()은 정확히 어떤 의미인지가 계속 걸렸습니다.
이번 글은 정답만 나열하는 글이 아니라, 제가 실제로 헷갈렸던 코드와 그 코드를 어떻게 고쳤는지 중심으로 정리한 공부 기록입니다.
오늘 문제들의 핵심은 어려운 알고리즘이 아니라, 지금 다루는 값이 숫자인지 문자열인지 정확히 구분하는 것이었습니다.
오늘 풀어본 문제
이번에 정리한 문제는 모두 프로그래머스 코딩 기초 트레이닝에 있는 문제입니다. 서로 다른 문제처럼 보이지만, 실제로는 문자열을 만들고 비교하는 감각을 익히는 흐름으로 이어져 있었습니다.
- 문자열 섞기: 두 문자열을 한 글자씩 번갈아 붙이기
- 문자 리스트를 문자열로 변환하기: 리스트의 원소를 하나의 문자열로 합치기
- 더 크게 합치기: 두 수를 서로 다른 순서로 붙여 비교하기
- 두 수의 연산값 비교하기: 붙인 값과 곱한 값을 비교하기
1. 문자열 섞기: answer = 0으로 시작하면 안 되는 이유
처음 문제는 두 문자열을 앞에서부터 한 글자씩 번갈아 붙이는 문제였습니다. 예를 들어 "aaaaa"와 "bbbbb"가 주어지면 결과는 "ababababab"가 됩니다.
처음에는 아래처럼 생각했습니다.
def solution(str1, str2):
answer = 0
for i in range(len(str1)):
answer += str1[i] + str2[i]
return answer
이 코드는 두 가지 이유로 문제가 생깁니다.
| 처음 쓴 부분 | 문제점 | 고친 방향 |
|---|---|---|
answer = 0 |
0은 숫자입니다. 여기에 문자를 더하려고 하면 자료형이 맞지 않습니다. | answer = ""처럼 빈 문자열로 시작합니다. |
return이 반복문 안에 있음 |
첫 번째 반복이 끝나는 순간 함수가 종료됩니다. | return을 반복문 밖으로 빼야 합니다. |
수정한 코드는 다음과 같습니다.
def solution(str1, str2):
answer = ""
for i in range(len(str1)):
answer += str1[i] + str2[i]
return answer
여기서 기억할 점은 간단합니다. 문자열을 쌓아갈 때는 처음 상자도 문자열이어야 합니다. 그리고 반복문으로 결과를 모두 만든 뒤에 반환해야 합니다.
2. 문자 리스트를 문자열로 변환하기: join을 이해하기
다음 문제는 리스트 안에 들어 있는 문자들을 순서대로 이어 붙여 하나의 문자열로 만드는 문제였습니다. 반복문으로 풀면 아래처럼 작성할 수 있습니다.
def solution(arr):
answer = ''
for i in range(len(arr)):
answer += arr[i]
return answer
이 풀이도 흐름을 이해하기에는 좋습니다. 빈 문자열을 만들고, 리스트 안의 문자를 하나씩 더해가는 방식이기 때문입니다. 다만 같은 작업을 더 간단하게 표현하면 이렇게 쓸 수 있습니다.
def solution(arr):
return ''.join(arr)
''.join(arr)에서 앞의 ''는 글자와 글자 사이에 넣을 구분자입니다. 아무것도 들어 있지 않으므로 공백이나 쉼표 없이 그대로 붙입니다. 예를 들어 ['a', 'b', 'c']를 넣으면 "abc"라는 하나의 문자열이 됩니다.
구분자를 바꾸면 결과도 달라집니다. 예를 들어 arr = ['apple', 'banana', 'orange']라고 할 때 아래처럼 사용할 수 있습니다.
| 사용 방법 | 결과 | 언제 쓰기 좋은가 |
|---|---|---|
' '.join(arr) |
apple banana orange |
단어 사이를 띄어 보여줄 때 |
','.join(arr) |
apple,banana,orange |
값을 쉼표로 구분할 때 |
'\n'.join(arr) |
각 단어가 줄바꿈되어 출력 | 목록처럼 세로로 보여줄 때 |
처음에는 반복문 풀이로 원리를 이해하고, 익숙해지면 join()으로 더 간결하게 쓰는 식으로 정리하면 좋을 것 같습니다.
3. 더 크게 합치기: 붙인 값을 비교하기
이 문제는 두 정수를 서로 다른 순서로 붙여본 뒤, 더 큰 값을 반환하는 문제입니다. 예를 들어 a = 9, b = 91이라면 991과 919를 비교합니다.
처음에는 이렇게 풀 수 있습니다.
def solution(a, b):
answer = 0
case1 = str(a) + str(b)
case2 = str(b) + str(a)
if case1 > case2:
answer = int(case1)
else:
answer = int(case2)
return answer
방향은 맞습니다. 숫자를 바로 더하는 것이 아니라 문자열로 바꿔 붙여야 하기 때문입니다. 다만 answer 변수를 꼭 만들 필요는 없고, 비교할 값을 처음부터 숫자로 바꿔두면 더 간단하게 쓸 수 있습니다.
def solution(a, b):
return max(int(f"{a}{b}"), int(f"{b}{a}"))
f"{a}{b}"는 a와 b를 이어 붙인 문자열을 만들어줍니다. 그 결과를 int()로 바꿔서 숫자 크기로 비교하면 됩니다.
4. 두 수의 연산값 비교하기: 비슷하지만 비교 대상이 다르다
마지막 문제는 앞 문제와 비슷해 보이지만 비교 대상이 다릅니다. 이번에는 a 뒤에 b를 붙인 값과 2 * a * b를 비교해야 합니다.
def solution(a, b):
case1, case2 = int(f"{a}{b}"), 2 * a * b
return case1 if case1 >= case2 else case2
여기서는 case1이 붙인 값이고, case2가 곱한 값입니다. 문제 조건상 두 값이 같으면 붙인 값을 반환해야 하므로 case1 >= case2로 비교했습니다.
반환값만 놓고 보면 아래처럼 더 짧게 쓸 수도 있습니다.
def solution(a, b):
return max(int(f"{a}{b}"), 2 * a * b)
다만 처음 공부할 때는 두 값을 변수로 나누어 보는 편이 더 이해하기 쉽습니다. 어떤 값과 어떤 값을 비교하는지 눈에 보이기 때문입니다.
오늘 정리한 내용
- 문자열을 누적할 때는 숫자
0이 아니라 빈 문자열""로 시작한다. return이 반복문 안에 있으면 첫 번째 반복에서 함수가 끝날 수 있다.- 리스트 안의 문자열을 합칠 때는
''.join(arr)을 사용할 수 있다. - 두 값을 붙여 표현할 때는
f"{a}{b}"처럼 쓸 수 있다. - 문제마다 비교 대상이 다르므로
a + b,ab,ba,2 * a * b를 구분해야 한다.
오늘 공부에서 가장 크게 남은 건 문법을 외우는 것보다 자료형을 먼저 보는 습관입니다. 내가 지금 숫자를 다루는지, 문자열을 다루는지에 따라 시작값도 달라지고, 비교 방식도 달라집니다.
마무리
Day3는 어려운 알고리즘을 배운 날이라기보다, 기본기를 다시 확인한 날에 가까웠습니다. 작은 실수였지만 answer = 0과 answer = ""의 차이, return의 들여쓰기 차이를 직접 겪어보니 왜 기초 문법이 중요한지 더 확실히 느꼈습니다.
'AI > Coding_Test' 카테고리의 다른 글
| 프로그래머스 DAY 2: 파이썬 문자열 출력과 슬라이싱 한 번에 정리 (0) | 2026.07.06 |
|---|