[HackerRank] Separate the Numbers

아르당·2024년 1월 11일
0

HackerRank

목록 보기
64/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

숫자로 된 문자열 s가 연속으로 두 개 또는 더 많은 명확한 정수 a[1], a[2], ..., a[n]로 나눠지고 다음과 같은 규칙을 만족한다면 아름답다.

  1. a[i] - a[i - 1] = 1 여기서 1 < i <= n (시퀀스에 각 요소는 이전 요소보다 1이 크다.)
  2. a[i]는 0으로 시작하지 않는다. 예를 들면, s = 10203을 연속적인 {1, 02, 03}으로 쪼갤 수 있지만, 02와 03이 0으로 시작하기 때문에 아름답지 않다.
  3. 시퀀스의 컨텐츠는 다시 배치하지 않는다. 예를 들면, s = 312을 {3, 1, 2}로 쪼갤 수 있지만, 첫 번째 조건(1 - 3 ≠ 1)을 어기기 때문에 아름답지 않다.

아래 다이어그램은 아름다운 문자열을 나타낸다.

각 쿼리는 정수형 문자열 s로 구성되는 q개의 쿼리를 수행해라. 각 쿼리에 대해 문자열이 아름다운지 출력해라. 만약 아름답다면 "YES x"를 출력해라. 이때 x는 연속으로 증가하는 첫 번째 숫자이다. 만약 x의 값이 여러 개가 있다면, 가장 작은 값을 출력해라. 그렇지 않으면 "NO"를 출력해라.

Function Description

  • s: 문자열로 나타낸 정수 값

Prints

  • String: 위의 설명대로 출력해라. 반환값은 없다.

Constraints

  • 1 <= q <= 10
  • 1 <= |s| <= 32
  • s[i] ∈ [0 - 9]

All Code

public static void separateNumbers(String s) {
	long firstNum = 0;
	StringBuilder sb = new StringBuilder();
	long currentNum;

	for(int i = 1; i <= s.length() / 2; i++){
		firstNum = Long.valueOf(s.substring(0, i));
		sb = new StringBuilder(String.valueOf(firstNum));
		currentNum = firstNum;

		while(sb.length() < s.length()){
			currentNum++;
			sb.append(currentNum);
		}

		if(sb.toString().equals(s)){
			break;
		}
	}

	if(sb.toString().equals(s)){
		System.out.println("YES " + firstNum);
	}else{
		System.out.println("NO");
	}
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글