반응형
https://www.acmicpc.net/problem/17618
모든 수를 검사하는 brute force로 푼 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
범위 n, 정답을 출력할 ans를 선언한 뒤 n을 입력해줍니다.
📔 풀이과정
n이 최대 1천만이므로 1초 이내로 정답을 맞출 수 있었습니다.
1. n만큼 for문을 돌며 또 for 문을 수행할 수 있습니다. 각 자릿수는 최대 8자리이기 때문입니다. 따라서 for문을 수행해서 합을 구했습니다. 그 값을 지역변수 sum을 선언해 저장합니다.
2. 합을 구한뒤 현재의 수에 sum을 나누었을 때 나누어 떨어진다면 ans++해줍니다.
* c++에서의 시간복잡도 계산을 python에서 어떻게 해야하는지 모르겠으나 비슷한 code인데도 부분점수밖에 받지 못했는데 이유를 아직 찾지 못했습니다. 혹시 아시는 분 아래 python code를 올려두었으니 알려주시면 감사하겠습니다. ㅜㅜ
📔 정답출력
ans를 출력해줍니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
int n, ans;
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
string stringN = to_string(i);
int sum = 0;
for(int j = 0; j < stringN.size(); j++){
sum += stringN[j] - '0';
}
if(i % sum == 0) ans++;
}
cout << ans;
}
맞왜틀 code
import sys
input = sys.stdin.readline
n = int(input())
num = int(n)
ans = 0
for num in range(1, n+1):
sum = 0
stringN = str(num)
lenN = len(stringN)
for j in range(lenN):
sum += int(stringN[j])
if(num % sum == 0): ans+=1
print(ans)
'Algorithm > Brute Force' 카테고리의 다른 글
(C++) - 백준(BOJ) 3135 : 라디오 (0) | 2022.03.24 |
---|---|
(C++) - 백준(BOJ) 2635 : 수 이어가기 (0) | 2022.03.15 |
(C++) - 백준(BOJ) 1531 : 투명 (2) | 2022.02.22 |
(C++) - 백준(BOJ) 9094 : 수학적 호기심 (0) | 2022.02.13 |
(C++) - 백준(BOJ) 1251 : 단어 나누기 (0) | 2022.02.11 |