본문 바로가기
백준/20001 - 25000

[백준] 22351번 : 수학은 체육과목입니다 3(JAVA)

by lms0806 2021. 8. 1.
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
반응형

댓글