[문제 링크] 👇
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이 방법
💡 2로 나누기
주어진 음식의 양을 두 사람에게 나누어 주어야 하므로 2로 나눈다. 2로 나눈 몫만큼 음식을 순서대로 배치하면 된다.
입력 예시
[1, 7, 1, 2]
- 0번째 인덱스는 물의 양이고, 물은 항상 1이므로 신경 쓰지 않는다.
- 1번째 인덱스부터 음식의 양이 주어진다.
- 1번째 인덱스를 2로 나눈 몫은 3이다. 이 말은, 7개의 음식을 3개씩 나누어서 두 사람에게 줄 수 있다는 말이다. 따라서 1을 3만큼 저장한다.
- 2번째 인덱스는 2보다 작으므로 두 사람에게 나누어 줄 수 없다. 따라서 무시한다.
- 3번째 인덱스를 2로 나눈 몫은 1이다. 즉 2개의 음식을 1개씩 나누어 줄 수 있으니, 3을 1만큼 저장한다.
이런 과정을 거쳐서 나온 값은 '1113' 이다. 여기에 1113을 반대로 다시 배치해야 하므로 문자열[::-1] 을 사용한다.
최종적으로 결과를 반환할 때 기존 문자열 + 0 + 기존 문자열[::-1] 을 반환한다.
Solution
def solution(food):
answer = ''
for i in range(1, len(food)):
if food[i] >= 2: # 2로 나눠야 하므로 2보다 커야 한다.
for j in range(food[i] // 2):
answer += str(i)
return answer + '0' + answer[::-1]
👩💻 회고
이중 for 문 말고 아래와 같이 작성해도 된다. 원래 이중 for 문으로 할 생각이 없었는데, str(food[i] // 2) 라고 하는 바람에 값이 제대로 안 나와서 결국 solution 코드를 짰다.
answer += str(i) * (food[i] // 2)
다른 풀이를 봤는데 이렇게 간단하게 푸는 방법도 있었다. 대단하다는 말 밖에는...
def solution(food):
answer = ''.join(str(foodNumber) * (quantity // 2) for foodNumber, quantity in enumerate(food))
return answer + '0' + answer[::-1]
'프로그래머스 코딩테스트 > Level 1' 카테고리의 다른 글
[Programmers] L1. 추억 점수 (Python) (1) | 2024.11.16 |
---|---|
[Programmers] L1. [1차] 비밀지도 (Python) (1) | 2024.11.12 |
[Programmers] L1. 콜라 문제 (Python) (0) | 2024.11.07 |
[Programmers] L1. 모의고사 (완전탐색/Python) (0) | 2024.11.06 |
[Programmers] L1. 문자열 내 마음대로 정렬하기 (Python) (1) | 2024.11.06 |