본문 바로가기
개발/SWEA (D1) 문제 풀이

SW Expert Academy - 1933. 간단한 N의 약수(D1)

by v너굴이v 2022. 10. 22.

출처 - https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=1&contestProbId=AV5PhcWaAKIDFAUq&categoryId=AV5PhcWaAKIDFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=1&pageSize=10&pageIndex=2

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

 

SW Expert Academy

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

swexpertacademy.com

<나의 풀이>

과거 학부생 시절에 단골로 등장했던 문제이다.

약수, 최대공약수같은 문제는 방법이 거의 획일화되어 있어서 습득하고 활용하면 좋을 것 같다.

 

우선 입력값은 1개로 해당 정수의 약수를 출력해주면 되는 문제이다.

아무래도 약수가 여러개일 수도 있기 때문에 리스트로 출력해주는 것이 좋아 보인다.

또한 N이 1 이상 1,000 이하라는 조건도 고려해야 한다.

 

약수를 찾는 방법은 나누기라고 생각한다.

그래서 N을 어떤 수 x로 나누었을 때 나머지가 0이 되면, 그 어떤 수 x는 N의 약수가 되는 것이다.

또한 N을 N으로 나누었을 때 역시 나머지가 0이므로 자기 자신까지 포함해야 한다.

 

그렇다면 1부터 자기 자신까지?

바로 for문의 range가 떠오른다.

for i in range(1, N+1):

이렇게 설정하면 1부터 N까지의 수들을 활용할 수 있다.

그리고 N을 1부터 나누면서 나머지가 0인 경우를 리스트에 담으면 될 것 같다.

(경우 -> 조건문 활용!)

[파이썬 수 자료형 연산]
# 나누기
a / b 

# 나머지
a % b

# 몫
a // b

이게 아직 익숙하지 않아서 은근히 헷갈린다.

이번을 기회로 완벽하게 숙지해야겠다.

 

test_case = []
for i in range(1, N+1):
    if (N % i) == 0:
        test_case.append(i)
print(test_case)

나머지가 0이 아닌 케이스는 굳이 고려하지 않아도 될듯하다.

입력값이 1000일 때, 출력 값이 다음과 같았다.

[1, 2, 4, 5, 8, 10, 20, 25, 40, 50, 100, 125, 200, 250, 500, 1000]

여기서 'N이 1000보다 작거나 같을 때'라는 비교 연산을 넣어주면 좋을 것 같다.

test_case = []
for i in range(1, N+1):
    if (N <= 1000) and (N % i) == 0:
        test_case.append(i)
print(test_case)

0보다 크거나 같다 조건을 넣거나, 음수, 1000보다 큰 수를 넣었을 때 Error가 발생했다는 문구를 넣어주면 좋겠지만,

실전 코딩이 아닌 테스트 제출용이라서 생략하겠다!(절대 귀찮아서가 아니다!)

 

그리고 마지막으로 최근 가장 애용하는 (*)을 활용하여 출력 값을 나타내겠다.

test_case = []
for i in range(1, N+1):
    if (N <= 1000) and (N % i) == 0:
        test_case.append(i)
print(*test_case)

D1문제들 중에서도 비교적 쉬운 문제였다.

이런 수학적 개념과 관련된 문제는 활용도가 높다고 생각되므로 잘 숙지하는 것이 좋아 보인다!

댓글