프로그래머스_푸드 파이터

임정민·2022년 11월 26일
2

알고리즘 문제풀이

목록 보기
1/173
post-thumbnail

코딩테스트 연습 스터디 진행중 입니다. ✍✍✍
Notion : https://www.notion.so/1c911ca6572e4513bd8ed091aa508d67

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12945

풀이

[나의 풀이]


def solution(food):
    
    tmp = []
    food.append(food[0]) 
    food.remove(1) # [음식1,음식2,음식3...물] 형태로 변경

    length = len(food)
    food2 = [] 

    for i in range(length):
        
        if i == length-1 :
            tmp.reverse() # [...음식3, 음식2, 음식1]
            food2.append(0) # [음식1, 음식2, 음식3..0 = (물)]
            break
            
        for j in range(0,int(food[i]/2)):
            food2.append(i+1)
            tmp.append(i+1)

    answer = str(food2 + tmp) # [음식1, 음식2, 음식3..물] + [...음식3, 음식2, 음식1]
    answer= answer.replace(',', '') # 문자열로 바꾸기
    answer= answer.replace('[', '')
    answer= answer.replace(']', '')
    answer= answer.replace(' ', '')
    
    return answer

[팀원의 풀이1]

def solution(food):

	answer = ''
    
    # 0번째 food 지우기
    del food[0]
    
    tmp = ''
    
    # 각 food 절반으로 나눠서 앞 뒤로 배치
    # enumerate -> index와 value 값 각각 접근 가능
    for idx, cnt in enumerate(food):
		# cnt/2 는 cnt를 2로 나누고 소수점 버림
        for _ in range(cnt/2):
        	tmp += str(idx+1)
            
    # food를 대칭이 되도록 str에 더해주기
    answer=tmp+str(0)+tmp[::-1]
    return answer
    

[팀원의 풀이2]

def solution(food):
	answer = ''
    for i in range(1,len(food)):
    	if food[i]%2 == 0:
        	answer += str(i)*int((food[i]/2))
		else :
        	answer += str(i)**int(((food[i]-1)/2))
	answer = answer + '0' + answer[::-1]
    return answer

메모

1.enumerate() 함수


# 예시
for entry in enumerate(['A', 'B', 'C']):
    print(entry)

(0, 'A')
(1, 'B')
(2, 'C')

# 시작 인덱스 변경
for i, letter in enumerate(['A', 'B', 'C'], start=101):
    print(i, letter)

101 A
102 B
103 C

# 원리
iter_letters = iter(['A', 'B', 'C'])
next(iter_letters)
'A'
next(iter_letters)
'B'
next(iter_letters)
'C'

enumerate_letters = enumerate(['A', 'B', 'C'])
next(enumerate_letters)
(0, 'A')
next(enumerate_letters)
(1, 'B')
next(enumerate_letters)
(2, 'C')

# 2차원 리스트 루프
matrix = [['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I']]
for r in range(len(matrix)):
    for c in range(len(matrix[r])):
        print(r, c, matrix[r][c])
0 0 A
0 1 B
0 2 C
1 0 D
1 1 E
1 2 F
2 0 G
2 1 H
2 2 I

for r, letters in enumerate(matrix):
    for c, letter in enumerate(letters):
        print(r, c, letter)
0 0 A
0 1 B
0 2 C
1 0 D
1 1 E
1 2 F
2 0 G
2 1 H
2 2 I

2) List에 저장해서 str로 바꾸지말고 바로 문자열형으로 더하기

tmp = str(i)

3) tmp의 인덱스 반대로

tmp[::-1]

감사합니다.👨‍👧‍👧👨‍👧‍👧👨‍👧‍👧

profile
https://github.com/min731

0개의 댓글