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문제들 중에서도 비교적 쉬운 문제였다.
이런 수학적 개념과 관련된 문제는 활용도가 높다고 생각되므로 잘 숙지하는 것이 좋아 보인다!
'개발 > SWEA (D1) 문제 풀이' 카테고리의 다른 글
SW Expert Academy - 2025. N줄덧셈(D1) (0) | 2022.11.04 |
---|---|
SW Expert Academy - 1938. 아주 간단한 계산기(D1) (1) | 2022.11.04 |
SW Expert Academy - 1936. 1대1 가위바위보(D1) (0) | 2022.10.22 |
SW Expert Academy - 2019. 더블더블(D1) (0) | 2022.10.21 |
SW Expert Academy - 1545. 거꾸로 출력해 보아요(D1) (0) | 2022.10.21 |
댓글