level1_푸드 파이트 대회

2024. 8. 11. 22:26파이썬_알고리즘(코딩테스트)/level1

 

내가 제출한 코드

def solution(food):
    answer = ''
    for i in range(1, len(food)):
        answer += str(i) * (food[i] // 2)
    return answer + "0" + answer[::-1]
  • for i in range(1, len(food))
    • 리스트의 두번째 요소(food[1])부터 마지막 요소까지 반복을 한다.
  • answer += str(i) * (food[i] // 2)
    • i를 문자열로 변환한 후, food[i] // 2 만큼 반복하여 answer 문자열에 추가한다.
  • return answer + "0" + answer[::-1]
    • answer + "0"은 answer 문자열에 0을 추가한다(중앙에 물을 배치해야하기 때문이다)
    • answer[::-1]는 answer 문자열을 역순으로 뒤집는다.
    • 최종적으로 좌우 대칭인 형태의 문자열을 생성한다.

 

 

 

다른 사람이 제출한 코드 

def solution(food):
    answer = "0"
    for i in range(len(food)-1, 0, -1):
        c = int(food[i] / 2)
        while c > 0:
            answer = str(i) + answer + str(i)
            c -= 1
    return answer

 

  • answer = "0"
    • 문자열의 중심에 위치할(물 배치)  초기값 "0"을 나타낸다. 
  • for i in range(len(food)-1, 0, -1):
    • i는 food 리스트의 끝에서 두번째 요소부터 첫 번째 요소까지 역순으로 반복한다. (끝에서부터 차례대로 인덱스를 감소시킨다)
  • c = int(food[i] / 2):
    • 현재 food[i] 값을 2로 나눈 몫을 c에 저장한다. 
    • 현재 인덱스 i에 해당하는 숫자가 몇 번 반복 될지를 결정한다.
  • while c > 0:
    • c가 0보다 클 동안 반복한다.
    • answer = str(i) + answer + str(i)
      • 현재 인덱스 i를 문자열로 변환하여, 기존 answer 문자열의 양쪽에 추가한다.
    • c -= 1
      • c에 1을 빼준다.
        • c가 0이 될 때까지 반복을 계속하기 위해서 사용한다.(각 숫자가 몇 번 반복될지를 제어하는 역할)
  • return answer
    • 최종적으로 대칭 문자열을 반환한다.