🤔 코드 아이디어 1. 빈 문자열 변수를 설정한다. 2. food 리스트를 순회, 순회할 때 범위는 food 리스트의 길이만큼 순회하며 1번 인덱스부터 3. 각 food 리스트의 숫자를 2로 나누어 반복횟수 구하기 4. 각각의 food 리스트의 인덱스와 곱하기(문자열 연산), 빈 문자열 변수에 넣기 5. 생성된 문자열 + '0' + 리버스된 문자열 반환
💟 코드 풀이
def solution(food):
left = ''
for f_num in range(1, len(food)):
left += str(f_num) * (food[f_num] // 2)
return left + '0' + left[::-1]
🟣 left = ''
왼쪽 문자열을 저장하는 변수로 빈 문자열을 세팅
🟣 for문
food 리스트를 순회
범위 range(1, len(food)) : food 리스트에서 두 번째 요소부터 마지막 요소까지를 순회
🟣 left += str(f_num) * (food[f_num] // 2)
f_num에 해당하는 숫자를 (food[f_num] // 2)번 반복하여 문자열로 생성
대칭성을 만들기 위해 값을 절반만 사용하는 것
🟣 left + '0' + left[::-1]
왼쪽 문자열과 그 역순을 중앙의 '0'과 함께 결합
💠 예시
food = [1, 3, 4, 6]
🔵 작동 과정
0번째 요소 1은 무시
for문에서 범위를 1부터 지정하였기 때문에 0번부터 카운팅하는 파이썬의 특성상 1은 무시
1번째 요소
3에 대해 (3 // 2) = 1이므로 1을 한 번 추가
str(1) * (3(food[1]) // 2)
2번째 요소
4에 대해 (4 // 2) = 2이므로 2를 두 번 추가
str(2) * (4(food[2])// 2)
3번째 요소
6에 대해 (6 // 2) = 3이므로 3을 세 번 추가
str(3) * (6(food[3])// 2)
left + '0' + left의 reverse
left의 reverse는 [::-1]로 설정 가능
[start:stop:step]
start : 슬라이싱을 시작할 인덱스. 생략하면 처음부터 시작
stop : 슬라이싱을 멈출 인덱스. 생략하면 끝까지 슬라이싱
step : 슬라이싱할 때의 간격(혹은 방향). 음수를 넣으면 역순으로 진행
'1223330333221'이 반환
💟 reverse()를 이용한 코드
def solution(food):
left = ''
for f_num in range(1, len(food)):
left += str(f_num) * (food[f_num] // 2)
# 문자열을 리스트로 변환
left_list = list(left)
# 리스트를 reverse()로 뒤집음
left_list.reverse()
# 리스트를 다시 문자열로 변환
reversed_left = ''.join(left_list)
return left + '0' + reversed_left