문제 링크
https://www.acmicpc.net/problem/20164
나의 기록
✅ 알고리즘 분류 : 구현, 문자열
✅ 성공 여부 : ✔
✅ 문제 난이도 : 골드5
✅ 체감 난이도 : Normal
접근 방법
구현은 어떻게 보면 "문제 읽기"와 "시간"과의 싸움인 것 같다.
초기에 조금 시간이 걸리더라도 문제를 꼼꼼히 읽고 어떤 구현을 해야 할지 그린 후 들어가면 코드에 들어가는 시간을 줄일 수 있다. (어느 알고리즘이나 마찬가지긴하지만... 구현은 특히) 게다가 문제에 이미 어떻게 짜야 할지 순서대로 답이 나와있기도 하다.
지난 한화비전 코딩테스트에서 문제를 제대로 읽지 않아 구현 문제에서 날려먹은 시간을 생각하면... 더더욱 그렇다!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class bj20164_홀수홀릭호석 {
static int min = 99999, max = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String N = br.readLine();
cut(N, 0);
System.out.println(min + " " + max);
}
public static void cut(String num, int sum){
// 먼저 홀수 갯수를 sum에 더한다.
for(int i = 0 ; i < num.length() ; i++){
int n = num.charAt(i) - '0';
if(n % 2 == 1) sum++;
}
// 한자리일 경우
if(num.length() == 1){
min = Math.min(min, sum);
max = Math.max(max, sum);
}
// 두자리일 경우
else if(num.length() == 2){
num = String.valueOf((num.charAt(0) - '0') + (num.charAt(1) - '0'));
cut(num, sum);
}
// 세 자리 이상일 경우
else{
for(int i = 1 ; i < num.length() - 1 ; i++){
for(int j = i+1 ; j < num.length() ; j++){
int n1 = Integer.parseInt(num.substring(0, i));
int n2 = Integer.parseInt(num.substring(i, j));
int n3 = Integer.parseInt(num.substring(j));
cut(String.valueOf(n1 + n2 + n3), sum);
}
}
}
}
}
'알고리즘 (Java)' 카테고리의 다른 글
(Java) 백준 20168 골목 대장 호석 - 기능성 (0) | 2023.05.09 |
---|---|
(Java) 백준 4358 생태학 (0) | 2023.04.26 |
(Java) 백준 1926 그림 (0) | 2023.04.26 |
(Java) 백준 2075 N번째 큰 수 (0) | 2023.04.26 |
(Java) 백준 9095 1, 2, 3 더하기 (0) | 2023.04.14 |