SWEA

[SWEA][python] 1933 간단한 N의 약수

winter17 2023. 2. 21. 00:07

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=1&contestProbId=AV5PhcWaAKIDFAUq&categoryId=AV5PhcWaAKIDFAUq&categoryType=CODE&problemTitle=&orderBy=PASS_RATE&selectCodeLang=PYTHON&select-1=1&pageSize=30&pageIndex=1&&&&&&&&&& 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

풀이 과정

num = int(input()) # 입력값 받고
N = num # 입력받은 값 저장할 num변수 생성
new = [1, num] # 약수는 자기자신과 1을 포함
for i in range(2, num+1): # range범위를 2부터 num까지
    if N % i == 0: # 나머지가 0이 되어야 약수이기 때문
        new.append(i) 
        new.append(N // i)
divisor = list(set(new)) # 중복을 제거하지 않으면 중복된 수가 나옴
divisor.sort() # 오름차순 정렬
print(*divisor) # 언패킹

 

 


리뷰

처음 시도했을 때 입력 값을 10으로만 두고 생각을 하고

cnt 변수를 두고 for문이 한 번씩 돌 때마다 1씩 증가하는 걸로 코드를 짰는데 이 부분이 틀렸었고

중복을 제거하지 않고 출력하면 조건에 만족하는 수가 전부 출력되는데 앞의 부분에서 이미 틀렸기 때문에 중복된 수가 나온다는 사실조차 몰라서 고려를 못했다

 

다시 생각해보니까 for문에서 range 범위를 잡아뒀기 때문에 cnt변수가 필요 없었고 여기까지 출력하니까 중복된 수 포함해서 조건에 만족하는 수가 순서대로(오름차순 아님) 출력이 되었다(중복포함됨). 그래서 set함수를 통해서 중복을 없애주고 sort함수로 오름차순 정렬을 시켜준 후 언패킹으로 출력해 줬더니

pass 되었다!

 

정답률이 80%가 넘는데도 불구하고 생각보다 쉽게 안 풀려서 좌절했는데 그래도 다른 사람코드 참고 안 하고 풀어내서 다행이다...