ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 푸드 파이트 대회
    코딩테스트 연습 2023. 12. 12. 11:10

    문제 설명

    제한사항

    입출력 예 및 설명

    문제 풀이

    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
Designed by Tistory.