백준 4592 중복을 없애자

문제

Al의 초콜릿 망고 회사는 방문자들이 2d 단지에 얼마나 많은 초콜릿 망고가 있는지 추측할 수 있는 웹 사이트를 갖고 있다. 방문자들은 1부터 99까지의 수를 추측한 후 "제출" 버튼을 누르는데, 안타깝게도 서버로부터 응답시간이 종종 길어져 방문자들이 이성을 잃은 나머지 "제출"을 연타하는 사태가 발생한다. 이게 우리가 해결해야 할 문제다.

ACM의 직원을 도와 연타된 중복을 걸러보자.

입력
각 줄마다 처음으로 정수 N(0 < N ≤ 25)이 주어진다. 그 다음 N개에 걸쳐 1부터 99 사이의 수가 주어진다.
마지막 줄에 입력의 끝을 알리는 0이 주어진다.

출력
각 케이스마다 한 줄씩 연속하는 중복을 제거한 원래의 제출 상태를 출력한다.
각 줄의 마지막에는 한 칸을 띄고 '$' 표시가 붙는다.

예제 입력 1
5 1 22 22 22 3
4 98 76 20 76
6 19 19 35 86 86 86
1 7
0

예제 출력 1
1 22 3 $
98 76 20 76 $
19 35 86 $
7 $

풀이 과정

입력 줄마다 리스트로 입력받아 첫 번째 원소가 '0'이면 종료한다.

'0'이 아니면 팝으로 제거한다.
중복을 제외하고 옮겨담을 리스트 li를 선언한다. 초기 원소는 0으로 한다.

입력받은 리스트의 한 원소마다 반복하는데, li의 맨 뒤의 원소와 비교해 다르다면 li에 그 원소를 삽입한다.
맨 처음 비교할 때 li의 맨 뒤 원소는 0이 되므로 입력받은 값에는 존재할 수 없기 때문에 맨 처음 비교한 값이 삽입될 수 있다.

처리가 끝난 후 li의 맨 처음 원소를 제거한다.
result 변수에 join() 함수를 이용해서 문자열로 만든다.

코드

while True:
    data = list(map(int, input().split()))
    if data[0] == 0:
        break
    data.pop(0)
    li = [0]
    for num in data:
        if li[-1] != num:
            li.append(num)
    li.pop(0)
    result = ' '.join(map(str, li)) + ' $'
    print(result)

백준 4592 중복을 없애자

좋은 웹페이지 즐겨찾기