[BOJ/백준] 5949번 : Adding Commas (Java)
📘 백준 5949번 : Adding Commas
💡 문제 풀이
방법 1 문자열을 잘라서 직접 ,
넣기 - StringBuilder 활용
입력 문자열(숫자)의 길이를 3으로 나눈 나머지를 먼저 앞에 출력 저장하고 콤마 입력
입력한 문자 이후의 문자들을 3개씩 출력 저장 후 콤마 입력
마지막에 출력하기 전에 마지막에 있는 콤마 삭제 후 출력
방법 2) java의 DecimalFormat을 사용하여 콤마 찍기 - DecimalFormat 활용
DecimalFormat의 "###,###"
패턴을 활용하여 정수에 콤마 찍기
✅ 코드 1 (Java)
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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// https://www.acmicpc.net/problem/5949
// 방법1) 문자열을 잘라서 직접 `,` 넣기
// 입력 문자열(숫자)의 길이를 3으로 나눈 나머지를 먼저 앞에 출력 저장하고 콤마 입력
// 입력한 문자 이후의 문자들을 3개씩 출력 저장 후 콤마 입력
// 마지막에 출력하기 전에 마지막에 있는 콤마 삭제 후 출력
public class B5949_Adding_Commas {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
char[] N = br.readLine().toCharArray(); // 입력 문자열(숫자)
int first = N.length % 3; // 첫번째 콤마 앞의 숫자를 입력하기 위한 변수
if (first != 0) { // 첫번째 콤마 앞에 숫자가 있음
for (int i = 0; i < first; i++) { // 숫자 입력
sb.append(N[i]);
}
sb.append(","); // 콤마 입력
}
for (int i = first; i < N.length; i += 3) { // 이후 숫자를 3개 + 콤마 형태로 출력 저장
sb.append(N[i]).append(N[i + 1]).append(N[i + 2]).append(",");
}
sb.setLength(sb.length() - 1); // 맨 끝의 콤마 삭제
System.out.println(sb); // 출력
br.close();
}
}
✅ 코드 2 (Java)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
// https://www.acmicpc.net/problem/5949
// 방법2) java의 DecimalFormat을 사용하여 콤마 찍기
public class B5949_Adding_Commas_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
DecimalFormat formatter = new DecimalFormat("###,###"); // 콤마 숫자 패턴
System.out.println(formatter.format(Long.parseLong(br.readLine()))); // 출력
br.close();
}
}
💾 제출 결과
🧩 새롭게 알게 된 점
방법 2가 편리하고 코드가 간단하지만 방법 1의 시간복잡도가 더 좋다. 그러나 입력 수 자체가 크진 않기 때문에 큰 차이는 없음.