새벽에 빠르고 가볍게 하나만 풀고 자자는 마인드로 시도를 했지만, 바보같이 엄청 오래 걸린 문제...

심지어 런타임 에러로 인해 고생하다가 포기하고 그냥 검색을 했더니 set() 함수를 사용하면 중복제거를 바로 시켜버리더라... ㅠㅠ

 

일단 런타임 에러가 걸린 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#runtime error(IndexError)
index = [0]*10
for i in range(10):
    num = int(input())
    index[i] = num % 42
index.sort()
# print(index, end = ' ')
 
cnt = 0
dif = 0
for i in index:
    if index[cnt] == index[cnt+1and cnt != 10:
        index.remove(i)
        cnt += 1
    elif cnt != 0 and index[cnt-1!= index[cnt]:
        cnt += 1
if len(index) == 5:  # 5인 이유는 위의 for문에 의해 모두가 같은 숫자일 때 5개가 남기 때문이다.
    print(1)
else:
    # print(index)
    print(len(index))
 
cs

일단 출력 예제는 pycharm상으로는 잘 돌아가기는 한다.

물론, 입출력 예제가 나오도록 끼워맞춘 코드인지라... 게다가 런타임 에러(IndexError)가 뜨는 걸 보니...

for문에서 index에 문제가 있다는 거다.

저걸 고쳐보려다가... 새벽 2시가 넘어서 도저히 못 건드리겠어서 포기했다...

그리고 검색을 해봤는데......


1
2
3
4
5
6
7
8
9
# 중복제거를 해주는 파이썬의 함수가 존재한다 ==> set()
 
arr = []
for i in range(10):
    n = int(input())
    arr.append(n % 42)
arr = set(arr)
print(len(arr))
 
cs

바로 나와주시는 set() 함수  ㅠㅠㅠㅠ

set( ) 함수로 중복제거를 한 방에 처리해버린다. 굳이 for문까지도 필요가 없다.

 

이전에 올렸던 10809문제에서도 그랬지만... 역시 함수를 알아야 한다.

그래도 궁금해지니 추후에 set( )함수의 실제 소스코드를 한 번 찾아볼 생각이다.

 

 

문제 출처: https://www.acmicpc.net/problem/3052

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net

 

+ Recent posts