## prog_134240
### 문제
- 수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때, 대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요.
- 준비한 음식의 수가 홀수 or 남을 경우 짝수개 까지만 표현
### 해결 방법
- i ==0 : 물의 경우 continue
- 1부터 food//2 개의 i 를 answer 에 추가
- 중간에 물 연결
- 마지막 상대편 선수는 문자열을 뒤집어서 연결
https://school.programmers.co.kr/learn/courses/30/lessons/134240
def solution(food):
answer = ''
for i in range(len(food)):
if i ==0:
continue
answer += str(i)*(food[i]//2)
final_answer = answer + "0" + answer[::-1]
return final_answer
input_arr = list(map(int,input().split()))
solution(input_arr)
def solution(food):
answer = ''
for i,n in enumerate(food[1:]):
answer += str(i+1) * (n//2)
return answer + "0" + answer[::-1]
### 문제
- 문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 찾는문제
- s="banana" , 최종 결과물은 [-1, -1, -1, 2, 2, 2]
### 해결방법
- s 에서 for 문으로 하나씩 돌면서 s[i] 가 s[:i] 에 있을 때 -> 앞에 동일한 문자가 있을때
- 해당 인덱스에서 s[:i].rfind(s[i])를 빼준 값을 append 해주었다
- 만약에 동일한 문자가 없다면 -1 append
https://school.programmers.co.kr/learn/courses/30/lessons/142086
def solution(s):
answer = []
for i in range(len(s)):
if s[i] in s[:i]:
first = s[:i].rfind(s[i])
# first = s[:i].rindex(s[i])
answer.append(i -first)
else:
answer.append(-1)
return answer
→ 예외 처리가 필요한 경우 rindex를, 예외를 피하고 싶을 경우 rfind를 사용
def solution(s):
answer = []
dic = dict()
for i in range(len(s)):
if s[i] not in dic: #처음 등장하는 문자라면
answer.append(-1)
else:
answer.append(i - dic[s[i]])
#dict 에는 어차피 가장 마지막의 인덱스 값이 들어갈테니
dic[s[i]] = i
return answer
str = input()
solution(str)
s[i]가 dic에 없다면, 즉 처음 등장하는 문자라면 answer에 1을 추가s[i]가 이전에 등장한 적이 있는 문자이므로 현재 위치 i에서 마지막으로 등장한 위치 dic[s[i]]를 뺀 값을 answer에 추가i를 dic에 s[i]의 값으로 저장합니다. 이는 s[i]의 가장 최근 등장 위치를 기록