Python

[python] 문자열 뒤집기

ollive 2024. 7. 20. 00:27

문제 : 푸드파이트 대회

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 1 )  for 와 문자열 특징 이용 

  1. 먼저, 물은 마지막에 처리하기위해 food리스트에서 제거하였다.
  2. for문을 이용해, 먼저 한명이 먹는 음식의 수(cnt)를 추출한다.
  3. 대회동안 한사람이 먹는 음식의 순서(order)를 나열한다. 
  4. 해당문자열과 물('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 이용 

  1. while과 food리스트의 길이를 이용해, 음식 칼로리 순서대로 1명이 몇개의 음식을 먹는지 알아낸다.
  2. 칼로리별 음식 갯수(cnt)와 해당 라운드의 넘버(n)를 곱하여 음식을 배치하는데, 리스트 내 각자리(n-1)에 2번씩 넣어주어 대칭을 이루도록한다. (사진 1)
  3. 음식배치가 다 담기면, 그 다음 자릿수에 물을 의미하는 0을 넣어 음식배치를 완성시킨다.
  4. 형식이 리스트이므로 합쳐서 문자열(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

(사진 1)