어떤 수가 주어질 때, 그 수가 5로 나누어 떨어지는 수 라면 5로 하나씩 빼고
3으로 나누어 떨어지는 수라면 3을 하나씩 빼면 될 것 같았다. 약간 그리디 알고리즘처럼 말이다. 하지만, 예외가 있었다.
(처음 풀었던 python 코드)
n = int(input())
cnt = 0
while(n != 0):
if(n % 5 == 0):
n -= 5
cnt += 1
elif(n % 3 == 0):
n -= 3
cnt += 1
else:
cnt = -1
break
print(cnt)
하지만, 위 코드처럼 풀면, 8이라는 수는 2가 나와야 정상인데, -1을 출력하고 만다.
다시 고민해봤다.
(두번 째로 고친 python 코드)
n = int(input())
cnt = 0
while(n != 0):
if(n % 5 == 0):
n -= 5
cnt += 1
elif(n % 3 == 0):
n -= 3
cnt += 1
elif(n >= 5):
cnt += n//5
n = n % 5
else:
cnt = -1
break
print(cnt)
n >=5 라는 제어문을 처리를 해주었지만, 역시 틀렸다. 관점을 바꿔보았다.
3씩 항상 빼되, 5로 나누어지는 수라면 그 몫을 그대로 cnt에 더해주면 될 것 같았다.
(최종 python 코드)
n = int(input())
cnt = 0
while(n != 0):
if(n % 5 == 0):
cnt += n//5
break
elif(n <= 0):
cnt = -1
break
n -= 3
cnt += 1
print(cnt)
쉬운 문제라고 생각했지만, 시간이 좀 걸렸다...
(자바 코드)
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int bag =0;
while(true) {
if(N%5 ==0) {
System.out.println(N/5+bag);
break;
}
else if(N<=0) {
System.out.println(-1);
break;
}
N = N -3;
bag ++;
}
sc.close();
}
}
반응형
'컴퓨터 공부 > 📚 Baekjoon(백준)' 카테고리의 다른 글
[백준/알고리즘/python/java] 11047번 - 동전 0 (0) | 2021.02.02 |
---|---|
[백준/알고리즘/python/java] 1978번 - 소수 찾기 (0) | 2021.01.28 |
[백준/알고리즘/python/java] 2941번 - 크로아티아 알파벳 (0) | 2021.01.27 |
[백준/알고리즘/python/java] 1316번 - 그룹 단어 체커 (0) | 2021.01.27 |
[백준/알고리즘/python/java] 4673번 - 셀프 넘버 (0) | 2021.01.27 |