본문 바로가기
코딩테스트

[백준] 3048 개미 - python

by CuckooBird 2023. 1. 28.

백준 3048 개미

https://www.acmicpc.net/problem/3048

 

3048번: 개미

T초가 지난 후에 개미의 순서를 출력한다. 첫 번째 개미 그룹은 왼쪽에서 오른쪽으로 움직이고, 두 번째 그룹은 반대 방향으로 움직인다.

www.acmicpc.net


코드

메모리 30616KB | 시간 44ms | 코드길이 489B

import sys
N1, N2 = map(int, sys.stdin.readline().rstrip().split())
ant_L = list(map(str, sys.stdin.readline().rstrip()))
ant_L.reverse()
ant_R = list(map(str, sys.stdin.readline().rstrip()))
T = int(sys.stdin.readline().rstrip())
ant = ant_L + ant_R
for _ in range(T):
    for i in range(N1+N2-1):
        if ant[i] in ant_L and ant[i+1] in ant_R:
                ant[i], ant[i+1] = ant[i+1], ant[i]
                if ant[i+1] == ant_L[-1]:
                    break
print("".join(ant))

왼쪽 개미가 ant_L이고, 오른쪽 개미가 ant_R 일 경우에 둘을 바꾸어 주는 것만 꼬옥 기억해주면 되는 문제입니다.

 

주의할 점은 사이클 한번 돌린 뒤의 처리인데요.

마지막 if문에서 바꾼 개미가 맨 앞 개미라면 멈추게 하는 코드가 그 처리입니다.


Search 🔍

  • 리스트를 반대로 정렬해주는 list.reverse() 함수를 검색해보았습니다.
  • 마지막 if문은 구글링으로 알아냈습니다. 어디서 멈춰야 할지 그 포인트를 알았다면 좋았을 것 같습니다.
  • 출력 줄을 검색했습니다. 
    리스트를 띄어쓰기 없이 출력하려면 print("".join(list)) 를 사용해야 합니다.
    따옴표 안에 들어가는 문자열은 구분자입니다.
list = ['a' , 'b' , 'c']
print("".join(list))   # abc
print("_".join(list))  # a_b_c
print(", ".join(list)) # a, b, c

후기

마지막 if문은 구글링해서 알았다고 했는데요, 그 줄만 제외하면 정답을 올려주신 블로거분과 코드가 완전히 일치하더라고요. 뭔가.. 신기했습니다. 여러 문제를 풀다보니 어떻게 정답코드를 짜야할지 저도 모르는 새에 감이 온건지.. 뿌듯합니다. 앞으로도 열심히 하겠습니다.