https://www.acmicpc.net/problem/1769
- 예제 입력1
1234567
- 예제 출력1
3
NO
- 문제 접근
- 알고 있는 3의 배수는 한 자리로 3, 6, 9 밖에 모름
- 즉, X → Y로 변경할 때 10보다 작은 수가 될 때까지 변경을 해야한다는 의미
- 출력
- 10보다 작은 Y가 될 때까지 몇 번의 변경이 일어났는지 출력
- 3의 배수인지 아닌지 YES, NO로 출력
- 문제 해결
- 10보다 클 경우 각 자리수를 모두 더하고 작아질 때까지 반복
- 숫자인 형태로 계산하기 보다 String의 CharAt() 메서드를 이용하는 것이 더 효율적일 것으로 생각 됨
- 기존 풀이 [메모리 : 20100KB / 시간 : 228ms]
public static void main(String[] args) throws Exception{
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int count = 0;
int sum = str.length() == 1 ? Integer.parseInt(str) : 0;
while(str.length() != 1){
sum = 0;
count++;
for(int i = 0; i < str.length(); i++){
sum += str.charAt(i) - '0';
}
str = String.valueOf(sum);
}
String res = sum % 3 == 0 ? "YES" : "NO";
sb.append(count).append("\n").append(res);
System.out.println(sb);
}
'Coding Test > Problem Number' 카테고리의 다른 글
[Java] 스택 [10828번] (0) | 2024.07.24 |
---|---|
[Java] 큐 [10845번] (0) | 2024.07.24 |
[Java] 단어순서 뒤집기 [12605번] (0) | 2024.07.24 |
[Java] 막대기 [17608번] (0) | 2024.07.24 |
[Java] N과 M 12 [15666번] (0) | 2024.07.22 |