백준/20001 - 25000
[백준] 22351번 : 수학은 체육과목입니다 3(JAVA)
lms0806
2021. 8. 1. 11:28
728x90
반응형
https://www.acmicpc.net/problem/22351
22351번: 수학은 체육과목 입니다 3
이환이의 선생님이 부른 두 정수 $A$와 $B$를 공백으로 구분하여 출력하라. 만약 가능한 답이 두 가지 이상이라면, 그중 $A$가 가장 작은 것을 출력하라. 이환이는 항상 정확한 답을 쓰기 때문에,
www.acmicpc.net
풀이
1 ~ 999 사이의 수가 연속해서 나열해 있는 문자열이 주어집니다.
그 문자열의 처음과 끝자리 수가 무엇인지 맞추는 문제입니다.
수가 1~999고 만약 수가 999나 11이 나올경우 9 9나 1 1이 아니라 999 999나 11 11이 되어야 합니다.
그러므로 입력받은 문자열의 길이가 4보다 작을 경우 모든 문자가 같은지 for문을 통해 체크해줍니다.
같을 경우 그 문자열 자체를 출력해줍니다.
그러지 않을 경우 for문을 통해 찾아줘야 합니다.
똑같은 문자열을 변수에 저장해줍니다.
startWith(문자열의 맨 앞이 문자와 같을 경우 true)이라는 명령어를 이용해 앞자리를 비교해줍니다.
같을 경우 문자열의 앞에서부터 substring으로 계속해서 잘라줍니다.
변수의 길이가 0이 될 경우 맞는 문자를 찾은것이므로 StringBuilder에 값을 넣어줍니다.
1부터 999까지 비교하였으나 아닐경우 sb가 비어있으므로 다시 처음 for문을 진행해줍니다.
소스코드
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 s = br.readLine();
int n = 1;
if(s.length() < 4) {
char c = s.charAt(0);
for(; n < s.length(); n++) {
if(s.charAt(n) != c) {
break;
}
}
}
StringBuilder sb = new StringBuilder();
if(n == s.length()) {
sb.append(s + " " + s);
}
else {
for(int i = 1; i <= 999; i++) {
if(s.startsWith(Integer.toString(i))) {
String str = s;
for(int j = i; j <= 999; j++) {
if(str.startsWith(Integer.toString(j))) {
str = str.substring(Integer.toString(j).length());
}
else {
break;
}
if(str.length() == 0) {
sb.append(i + " " + j);
break;
}
}
if(sb.length() != 0) {
break;
}
}
}
}
System.out.print(sb);
}
}
728x90
반응형