✳️ 코드 작성
🤔 코드 아이디어
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'이 반환
- left의 reverse는 [::-1]로 설정 가능
💟 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
- left는 문자열 형태이므로, 이를 리스트로 변환하기 위해 list(left)를 사용함
- 문자열은 수정이 불가능하므로 리스트로 변환한 후 뒤집어야 함
- left_list.reverse()는 리스트를 제자리에서(reverse in-place) 뒤집음
- 뒤집은 리스트를 다시 문자열로 변환하기 위해 ''.join(left_list)를 사용하여 reversed_left에 저장
- 마지막으로 원래의 left, 중앙의 '0', 그리고 reversed_left를 이어서 최종 문자열을 반환
'📒 Today I Learn > 🐍 Python' 카테고리의 다른 글
[Python] 모의고사 (0) | 2024.10.02 |
---|---|
[Python] 콜라 문제 (0) | 2024.09.27 |
[Python] 가장 가까운 같은 글자 (0) | 2024.09.25 |
[Python] 두 개 뽑아서 더하기 (0) | 2024.09.20 |
[Python] k번째 수 (0) | 2024.09.19 |