

1. 문제 분석
1) 주어진 수가 3의 배수인지 알아내기 위해, 자릿수를 모두 더해서 나온 "한 자리 수"가 3의 배수인지 구해야 한다.
2) 한 자리 수가 될 때까지 계속해서 자릿수를 더해야 하며, 이 작업을 몇번 반복했는지 출력해야 한다.
3) 주어진 수가 3의 배수라면 YES, 아니라면 NO를 출력한다.
2. 제약 조건
자연수 X <= 1.000.000"자리"
3. 의사결정
[ 1. 문자열 > 문자 > 정수로 형변환하는 경우 ]
1) 주어진 수 number를 문자열로 입력받는다. (길이 재기 편하도록)
2) 다 더한 숫자가 "한자리 수가 될 때까지" while문을 반복한다.
(1) for문을 사용하여 number를 한글자씩 인덱싱하면서 누적한다.
(2) number를 갱신한다.
3) 한자리수가 되어 while문을 빠져나오면, 3의 배수인지 확인 후 YES / NO를 출력한다.
[2. 형변환 없이 정수로만 진행하는 경우 ] ===> 이걸로 진행하면 X . int나 long으로 풀 수 없다...
1) 주어진 수 number를 정수로 입력받는다.
2) (안쪽 while) %10 해서 마지막 자리를 뽑아내 누적하고, /10 해서 누적한 자리를 버린다. number의 길이만큼 반복한다.
3) (바깥쪽 while) number 변수를 누적값으로 갱신한다. count++ 한다. number가 한자릿수가 될 때까지 반복한다.
4) count와 Yes/No를 출력한다.
4. 문제 해결
1) char -> int 변환 방법 : 문자로 되어있는 char에서 '0'값을 뺀다.
ex) char 값인 '1'을 int형으로 변환하면 아스키코드 값 49이다.
우리는 int값 1이 필요하므로, 49-48 = 1을 만들어야 한다.
char 값인 '0'은 아스키코드 48이다. 따라서, char '1' - char '0' = 1이 된다.
2) 더 간단한 방법 : int일때 %10으로 계산하면 끝자리수를 알 수 있다! 이를 누적하면 형변환 없이 더 빠르게 계산 가능
3) 첫번째 while문의 조건 구하기
(1) 정수 길이를 직접 구해서 1이 아닌 경우 반복한다. : (int)(Math.log10(number)+1) 사용
(2) 정수 길이가 두자릿수 이상일 경우 반복한다. number >= 10 사용
4) Integer.toString() : 정수를 String으로 변환한다.
String.valueOf()의 : 모든 데이터타입을 String으로 변환할 수 있다. 속도 차이는 거의 비슷하다.
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 number = br.readLine(); // 주어진 수를 입력받아 number에 넣음
int count = 0; // while문 반복 횟수 기록용
// 자릿수를 계속 더하면서 한 자릿수가 될 때까지 반복
while (number.length() > 1) { // 길이가 1을 초과할 때 while문 계속 반복
int sum = 0; // 누적할 변수 sum 선언
// "number의 자릿수만큼" for문 돌려서 각 자릿수 누적 : number를 캐릭터 배열로 바꿔서 배열의 각 요소를 기준으로.
for (char c : number.toCharArray()) { // toCharArray를 사용하여 char 배열로 만든다.
sum += c - '0'; // 정수로 만들어서 누적해줄건데, 아스키코드 "48"만큼을 빼서 정수 만들어주기
}
number = Integer.toString(sum); // 누적값을 다시 문자로 변환하여 number 갱신
count++;
}
System.out.println(count);
System.out.println(Integer.parseInt(number) % 3 == 0 ? "YES" : "NO"); // 숫자로 변환해서 3의 배수 찾기
}
}

| 31562. 전주 듣고 노래 맞히기 (1) | 2024.11.29 |
|---|---|
| 9933. 민균이의 비밀번호 (0) | 2024.11.29 |
| 10828. 스택 (0) | 2024.11.28 |
| 10845. 큐 (1) | 2024.11.28 |
| 12605. 단어 순서 뒤집기 (1) | 2024.11.28 |