Python
[python] 문자열 뒤집기
ollive
2024. 7. 20. 00:27
문제 : 푸드파이트 대회
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 1 ) for 와 문자열 특징 이용
- 먼저, 물은 마지막에 처리하기위해 food리스트에서 제거하였다.
- for문을 이용해, 먼저 한명이 먹는 음식의 수(cnt)를 추출한다.
- 대회동안 한사람이 먹는 음식의 순서(order)를 나열한다.
- 해당문자열과 물('0'), 뒤집힌 문자열(redro)을 합쳐서 전체 음식의 배치를 만들어준다.
def solution(food):
answer = ''
# food[0]은 물이고 항상 1이므로 리스트에서 일단 제외하고 마지막에 처리해줌
del food[0]
# 음식의 칼로리 순서대로 2명 분으로 나누어 각자 몇 개씩인지 알아냄
cnt = 0
n = 1
order = ""
for i in food:
cnt = i // 2
# 라운드별 음식의 갯수만큼 라운드를 반복하여, 한 사람이 먹는 음식을 나열함
order += str(n)*cnt
n += 1
# 전체음식 배치를 위해 위의 문자열과 물(0), 뒤집어진 문자열을 더해줌
redro = ""
redro = order[::-1]
answer = order + "0" + redro
return answer
풀이 2) while과 리스트와 insert 이용
- while과 food리스트의 길이를 이용해, 음식 칼로리 순서대로 1명이 몇개의 음식을 먹는지 알아낸다.
- 칼로리별 음식 갯수(cnt)와 해당 라운드의 넘버(n)를 곱하여 음식을 배치하는데, 리스트 내 각자리(n-1)에 2번씩 넣어주어 대칭을 이루도록한다. (사진 1)
- 음식배치가 다 담기면, 그 다음 자릿수에 물을 의미하는 0을 넣어 음식배치를 완성시킨다.
- 형식이 리스트이므로 합쳐서 문자열(answer)에 담아준다
def solution(food):
answer = ''
cnt = 0
n = 1
order = []
# n번째 음식을 각자 먹는 갯수를 알아냄
while len(food) > n:
cnt = food[n]//2
# 해당하는 음식의 갯수만큼 n번 음식을 반복하여, 리스트 순서에 맞춰 2개씩 담아줌
order.insert(n-1,str(n)*cnt)
order.insert(n-1,str(n)*cnt)
n += 1
# 리스트의 가운데에 물을 의미하는 0을 담아줌
order.insert(n-1,'0')
answer = "".join(order)
return answer