일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 프로젝트 기획서
- 7489번
- Java
- 1568번
- 자바
- 14215번
- 14592번
- 5597번
- 티스토리챌린지
- 10409번
- 14726번
- 백준
- 25576번
- 21964
- 10814번
- 24267번
- 1141번
- 14322번
- 14467번
- 25642번
- 14656번
- 나무 공격
- 2355번
- 1362번
- 21866번
- 20953번
- 1333번
- 오블완
- 25904번
- Baekjoon
- Today
- Total
suheang
[백준] | JAVA, 자바 | 1769번 - 3의 배수 본문
https://www.acmicpc.net/problem/1769
1769번: 3의 배수
문제가 잘 풀리지 않을 때, 문제를 바라보는 시각을 조금만 다르게 가지면 문제가 쉽게 풀리는 경험을 종종 해 보았을 것이다. 여러 가지 방법이 있지만 그 중 하나로 우리가 풀고 싶은 문제를
www.acmicpc.net
문제 요약 :
문제 1. "양의 정수 X는 3의 배수인가?"
이 문제를 아래와 같이 변환하는데, X의 각 자리의 수를 단순히 더한 수 Y를 만든다. 예를 들어 X가 1107이었다면, Y는 1+1+0+7=9가 된다. 그리고 Y에 대해서, 아래와 같은 문제를 생각한다.
문제 2. "Y는 3의 배수인가?"
위의 문제 1의 답은 아래의 문제 2의 대답과 일치한다. 위의 예의 경우, Y=9는 3의 배수이므로 X=1107 역시 3의 배수가 되는 것이다. 214는 각 자리수의 합 2+1+4=7이 3의 배수가 아니므로 3의 배수가 아니다.
문제 1을 풀고 싶으면 문제 2로 변환을 해서 문제 2의 답을 문제 1의 답으로 삼으면 된다. 일반적으로 Y는 X보다 크기가 작으므로, 문제 2가 더 쉬운 문제가 된다.
당신이 알고 있는 3의 배수는 한 자리 수밖에 없다고 가정하자. 즉, 문제 변환의 과정을 여러 번 거치다 보면 Y가 한 자리 수가 되는 순간이 있게 되는데, 그렇게 될 때까지 문제 변환을 반복한다는 뜻이다. 변환 후의 Y가 3, 6, 9 중 하나이면 원래의 수 X는 3의 배수이고, Y가 1, 2, 4, 5, 7, 8 중 하나이면 원래의 수 X는 3의 배수가 아니다.
큰 수 X가 주어졌을 때, 앞에서 설명한 문제 변환의 과정을 몇 번 거쳐야 Y가 한 자리 수가 되어, X가 3의 배수인지 아닌지를 알 수 있게 될지를 구하는 프로그램을 작성
( 첫째 줄에 문제 변환의 과정을 몇 번 거쳤는지를 출력한다. 이 수는 음이 아닌 정수가 되어야 한다. 둘째 줄에는 주어진 수가 3의 배수이면 YES, 아니면 NO를 출력 )
문제 풀이 :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String x = br.readLine();
int count = 0;
while (x.length() > 1) {
int sum = 0;
for (int i = 0; i < x.length(); i++) {
sum += x.charAt(i) - '0';
}
x = String.valueOf(sum);
count++;
}
int result = Integer.parseInt(x);
if (result % 3 == 0) {
System.out.println(count);
System.out.println("YES");
} else {
System.out.println(count);
System.out.println("NO");
}
}
}
1. 자연수 x를 String으로 입력받기
2. 변수 count 생성
3. x의 길이가 1 이상이라면 while문 진행
4. x.charAt(i)를 통해 각 자리의 수를 더하고 sum에 저장
5. x는 sum의 값을 다시 String으로 변환해서 저장
6. count 증가
7. 반복해서 x가 한 자리 수가 된다면 while문 종료
8. result에 한 자리 수가 된 x 저장
9. result의 값이 3으로 나눠지면 count와 "YES" 출력, 그렇지 않다면 count와 "NO" 출력
'알고리즘' 카테고리의 다른 글
[백준] | JAVA, 자바 | 2204번 - 도비의 난독증 테스트 (0) | 2024.04.06 |
---|---|
[백준] | JAVA, 자바 | 1924번 - 2007년 (0) | 2024.04.05 |
[백준] | JAVA, 자바 | 1417번 - 국회의원 선거 (0) | 2024.04.04 |
[백준] | JAVA, 자바 | 4796번 - 캠핑 (0) | 2024.04.04 |
[백준] | JAVA, 자바 | 4344번 - 평균은 넘겠지 (0) | 2024.04.02 |