-
문제 설명
제한사항
입출력 예 및 설명
문제 풀이
def solution(food): answer = '' n = 1 # 음식 순서 for f in food[1:]: # food[0]은 물의 양이라고 했으니까 food의 1번 원소부터가 음식의 양. quotient = f//2 # 1번 음식의 양(f)를 2(대결하는 사람 수)로 나눴을 때의 몫 answer += str(n)*quotient # 1번 음식이 몫만큼 반복됨. n+=1 # 음식의 순서를 1증가 # ↓ 음식의 배치(answer)를 0과 answer를 반대로 만든 배치(대결상대의 음식의 배치)를 합해준다. answer = answer + '0' + answer[::-1] return answer
코드 설명
※ 문제 풀이 코드 블럭 참고.
- food[0]은 물의 양이라고 했으니까 food[1:] 부터 for문 돌기
- for문을 돌면서 n번째 음식의 양을 2로 나눈 몫을 구하기 (대결하는 사람이 2명이니까 2로 나눈 몫만큼 해당 음식이 사용될 수 있음. 음식의 양이 홀수일 때는 음식이 남음(상관X) )
- answer(string type) 에 n번째 음식을 위에서 구한 몫만큼 더해주기(string이기 때문에 뒤에 연결됨)
- 음식의 순서를 1 증가하기
- answer(아직까지는 1명의 음식의 배치를 구한 것)에 0을 연결하고, answer를 반대로 출력하여(대결상대의 음식배치는 answer의 반대일 것이기 때문) 연결하기
채점 결과
다른 사람 풀이
def solution(food): answer ="0" # 물 for i in range(len(food)-1, 0,-1): # food list의 길이부터 1까지 거꾸로 i를 출력 ex) 3 2 1 c = int(food[i]/2) # 음식의 양을 2로 나눈 값의 몫구하기( int(소수점) 하면 소수점 자리 버리고 정수가 나옴) while c>0: answer = str(i) + answer + str(i) # 음식의 번호를 answer 양쪽에 연결하기 ex) 303 c -= 1 return answer
나는 음식 배치에서 0을 기준으로 왼쪽을 만들어놓고, 왼쪽을 거꾸로 만들어서 오른쪽을 만든 후에 왼쪽+0+오른쪽을 해서 최종 음식 배치를 완성했다. 근데 이 분은 처음부터 양쪽에서 str을 연결하는 방식으로 코드를 짰다. 채점결과를 확인해보면 이 코드가 속도가 더 걸린다. 양쪽에서 이을 생각은 못해봤는데 이런 방법도 있구나!
다른 사람 풀이 채점 결과
while이 있어서 그런가 속도 측면에서 이 코드가 좀 더 오래걸린다.
문제 출처 : 프로그래머스/ 푸드 파이트 대회/ Lv1
'코딩테스트 연습' 카테고리의 다른 글
[2021 카카오 채용연계형 인턴십] 숫자 문자열과 영단어 (2) 2023.12.26 콜라 문제 (0) 2023.12.20 햄버거 만들기 (1) 2023.12.07 숫자 변환하기 (0) 2023.12.04 뒤에 있는 큰 수 찾기 (2) 2023.11.29 - food[0]은 물의 양이라고 했으니까 food[1:] 부터 for문 돌기