<로직 고민>
- 일단 왼쪽 사람이 먹을 음식 배치 문자열을 만든 다음 그 배치의 역순 문자열을 만들고
- 왼쪽 문자열 + 0 + 역순 문자열 이렇게 하면 되지 않을까? 하는 생각이 든다
- food[1]부터 시작해서 food[len(food)]까지 2로 나눈 몫 수만큼 문자열에 i에 담긴 숫자로 추가해보자
- 약간의 고난(IndexError, TypeError)이 있었지만...어찌저찌 잘 해서 내가 생각한 대로 코드를 짰다
- 근데 1점밖에 못 얻었다 ㅋㅋㅋ
- 초 단순 풀이법이라 그런가....
- for문 2개 써서 그런가...?
def solution(food):
left = ''
for i in range(1, len(food)):
share = food[i] // 2
for j in range(share):
left += str(i)
right = "".join(sorted(left, reverse=True))
answer = left + "0" + right
return answer
- 이렇게 써서 채점도 했는데 천재풀이1 보고 내 풀이 바꿨다 ㅎㅎ...for문 없앰
- j를 활용할 일이 없다는 걸 알았을 때 for문은 버려야 하는구나 깨달았어야 했는데 ㅋㅋㅋ후..
- right도 left[::-1]로 쓰고 싶은데 굳이굳이 join 메서드 생각해 낸 내 머리를 존중하기 위해 그대로 두었다
<완성된 코드>
def solution(food):
left = ''
for i in range(1, len(food)):
share = food[i] // 2
left += str(i) * share
right = "".join(sorted(left, reverse=True))
# right = left[::-1] <- 더 간편하게 역순으로 바꾸는 방법..
answer = left + "0" + right
return answer
print(solution([1, 3, 4, 6])) # 1223330333221
print(solution([1, 7, 1, 2])) # 111303111
<다른 사람 풀이>
- 천재풀이1
def solution(food):
first = ''.join(str(foodNumber) * (quantity // 2) for foodNumber, quantity in enumerate(food))
second = first[::-1]
answer = first + '0' + second
return answer
- 하.. 이런 건 print 찍어볼 수도 없게 해놨네
- 나도 enumerate 써보려고 했는데 이렇게 썼어야 했군
- 아 foodNumber를 str으로 감싸면 quantity // 2 의 값만큼 숫자가 써지는구나..
- 이런 생각을 어떻게 하지...나도 이걸 알았으면 굳이 2번째 for문 쓸 필요가 없었네
- 근데 그럼 0은 어떻게 되는거지...??
- foodNumber가 0부터 시작하니까 0122333 이렇게 찍혀야 하는 거 아닌가? (첫 번째 예시 기준)
- 근데 first print 해보면 122333만 찍힘...뭐지...???
- 아 대박...1 // 2 = 0인데 str(0)이랑 곱하면 아무것도 안 찍힌다 대박 신기...무슨 문자열이든 숫자 0과 곱해지면 그냥 사라지는군...
- 아 그리고 역순으로 바꾸는 거 [::-1]...넘 오랜만이라 생각하지 못 했다...ㅠ