2025.07.11(Fri.)
[오늘의 알고리즘 1문제] - 프로그래머스 MySQL
<[PCCE 기출문제] 3번 / 수 나누기>
문제 설명
2자리 이상의 정수 number가 주어집니다. 주어진 코드는 이 수를 2자리씩 자른 뒤, 자른 수를 모두 더해서 그 합을 출력하는 코드입니다. 코드가 올바르게 작동하도록 한 줄을 수정해 주세요.
제한 사항
- 10 ≤ number ≤ 2,000,000,000
- number의 자릿수는 2의 배수입니다.
입출력 예시
| 입력 #1 | 4859 |
| 출력 #1 | 107 |
| 입력 #2 | 29 |
| 출력 #2 | 29 |
프로그래머스 코드
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int answer = 0;
for(int i=0; i<1; i++){
answer += number % 100;
number /= 100;
}
System.out.println(answer);
}
}
내가 작성한 코드
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int answer = 0;
while(number != 0){
answer += number % 100;
number /= 100;
}
System.out.println(answer);
}
}
내가 작성한 코드의 작동 원리는 다음과 같다.
- number % 100: 현재 수의 마지막 두 자리를 가져온다.
- answer += ...: 그 두 자리를 누적합에 더한다.
- number /= 100: 이미 처리한 두 자리를 버리고 앞의 자리로 이동한다.
- 위 과정을 number가 0이 될 때까지 반복한다.
for문이 아닌 while문을 선택한 이유
- while문은 몇 번 반복할지 미리 정해져 있지 않기 때문에, 0이 될 때까지 반복하는 데에 적합하다고 판단했다.
타인이 작성한 코드
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
int answer = 0;
for(int i=0; i<5; i++){
answer += number % 100;
number /= 100;
}
System.out.println(answer);
}
}
주어진 코드에서는 i<1로 1번만 반복하게 되어있다. i<5로 작성한 이유는 문제에서 주어지는 입력값의 제한사항이 2000000000까지이므로 우리가 자릿수를 판별하기 위해 반복문 안에서 number /= 100을 통해 확인하는 최대 횟수는 5번이다. i<5가 아닌 i<10, i<1000000 이어도 문제는 통과할 수 있지만, 불필요한 반복문 실행을 할 필요는 없으니 문제에서 주어진 제한사항에 맞춰 풀었다고 볼 수 있다.
'Develop > Daily Algorithm Practice 공략집' 카테고리의 다른 글
| [오늘의 알고리즘 1문제] - <Python 개발자 찾기> (0) | 2025.06.27 |
|---|---|
| [오늘의 알고리즘 1문제] - <잡은 물고기의 평균 길이 구하기> (1) | 2025.06.18 |
| [오늘의 알고리즘 1문제] - <잡은 물고기 중 가장 큰 물고기의 길이 구하기> (0) | 2025.06.17 |
| [오늘의 알고리즘 1문제] - <중성화 여부 파악하기> (0) | 2025.02.25 |
| [오늘의 알고리즘 1문제] - <조건에 맞는 회원 수 구하기> (0) | 2025.02.20 |