문제
https://www.acmicpc.net/problem/3048
3048번: 개미
T초가 지난 후에 개미의 순서를 출력한다. 첫 번째 개미 그룹은 왼쪽에서 오른쪽으로 움직이고, 두 번째 그룹은 반대 방향으로 움직인다.
www.acmicpc.net
풀이 과정
딕셔너리로 풀까, 한 칸씩 이동하도록 할까 등 여러 가지 방식을 고민하다가 0으로 채워진 리스트에 개미들을 넣는 방식으로 풀었다.
그래서 개미들을 각 자리에 맞게 넣어주도록 계산하는 것이 중요했다.
- 개미들이 들어갈 리스트를 만들어준다. 이때, 각 그룹마다 개미들을 두 칸씩 띄워 넣어줄 것이기 때문에 넉넉한 크기로 만들어준다.
- 첫 번째 그룹 개미들을 넣는데, 시간(t) 자리부터 넣어준다. (
t * 2 ~ t * 2 + n1 * 2
)
(두 칸씩 띄워 넣어 줄 것이기 때문에 지난 시간도 두배, 범위도 n1 길이의 두배로 설정)
* 그리고 첫 번째 그룹 개미들은 반대 방향으로 이동하고 있으므로 뒤집어서 넣어준다. - 두 번째 그룹 개미들도 첫 번째 그룹처럼 두 칸씩 띄워 넣는데, 첫 번째 그룹의 교차로 넣어준다.
그리고첫 번째 그룹 개미의 마지막 자리 - 시간(t*2)
자리부터 넣어준다.
(첫 번째 그룹의 마지막자리에서 시간만큼 두 번째 그룹을 왼쪽으로 이동해서 넣는다.) - 리스트에 있는 개미들을 문자열로 이어준다.
코드
# 입력 받기 n1, n2 = map(int, input().split()) tmp_ants1 = input() tmp_ants2 = input() t = int(input()) # 첫 번째 그룹 개미가 두 번째 그룹 개미 다 뛰어넘은 경우 if n1 + n2 - 1 <= t: print(tmp_ants2 + ''.join(reversed(tmp_ants1))) exit() # 개미들 넣을 리스트 만들어주기 # 두칸씩 띄워 넣을 것이기 때문에 넉넉하게 만들기 sum_ants = [0 for _ in range((n1 + n2) * 3)] tt = t*2 # 첫 번째 그룹 개미들 넣기 idx = n1 - 1 # 반대 방향이므로 뒤집어서 넣기 for i in range(tt, tt + n1*2, 2): sum_ants[i] = tmp_ants1[idx] idx -= 1 # 두 번째 그룹 개미들 넣기 idx = 0 for j in range(i - tt, i - tt + n2*2, 2): sum_ants[j+1] = tmp_ants2[idx] idx += 1 # 개미들 이어주기 answer = '' for ant in sum_ants: if ant: answer += ant print(answer)
'Algorithm > Baekjoon' 카테고리의 다른 글
[Python] 17609. 회문 (1) | 2022.09.22 |
---|---|
[Python] 24553. 팰린드롬 게임 (0) | 2022.09.19 |
[Python] 20057. 마법사 상어와 토네이도 (0) | 2022.09.15 |
[Python] 2211.네트워크 복구 (2) | 2022.08.24 |
[Python] 9935. 문자열 폭발 (0) | 2022.01.17 |