[HackerRank] Sherlock and The Beast

아르당·2024년 5월 18일
0

HackerRank

목록 보기
89/109
post-thumbnail

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

Problem

셜록 홈즈는 그의 숙적 모리아티 교수가 또 다시 무시무시한 음모를 꾸미고 있다고 의심하고 있다. 셜록 홈즈의 조수, 왓슨 박사는 모리아티가 MI6의 슈퍼 컴퓨터인 더 비스트와 관련된 최근 이슈들의 원인일 수도 있다고 제안한다. 조사하기를 겸신한 직후, 셜록은 모리아티 교수에게 더 비스트를 바이러스에 감염시켰다는 자랑이 적힌 노트를 받는다. 또한 모리아티 교수는 셜록에게 정수로 된 단서를 준다. 셜록은 바이러스를 제거하는 열쇠가 그 자릿수를 가진 가장 큰 'Decent Number'를 찾는 것이라고 결론을 내린다.
'Decent Number'는 아래와 같은 특징을 가진다.

  1. 숫자의 자릿수는 오직 3과 5로만 구성될 수 있다.
  2. 포함된 3의 개수는 5로 나누어 떨어져야 한다.
  3. 포함된 5의 개수는 3으로 나누어 떨어져야 한다.
  4. 그 숫자는 해당 길이에서 가장 큰 숫자이다.

모리아티의 바이러스는 더 비스트의 파괴를 카운트 다운하는 시게를 보여주고, 시간은 빠르게 흐르고 있다. 당신의 임무는 더 비스트가 파괴되기 전에 셜록이 키를 찾는 것을 도와야 한다!
예를 들어, 숫자 55533333와 555555은 둘 다 'Decent Number'다. 왜냐하면 첫 번째 숫자에 5가 3개, 3이 5개가 있고, 두 번째 숫자에 5가 6개 있기 때문이다. 그들은 자릿수의 적적한 나눗셈을 가진 해당 길이의 숫자에 대한 가장 큰 값이다.

Function Description

decentNumber 함수를 완성해라.
decentNumber 함수는 아래와 같은 매개변수를 가지고 있다.

  • int n: 만들어진 'Decent Number'의 길이

Prints

주어진 길이에 대한 적절한 숫자를 출력하거나, 해당 길이의 적절한 숫자를 형성할 수 없는 경우에는 -1을 출력해라. 반환값이 없는 경우는 없다.

Constraints

  • 1 <= t <= 20
  • 1 <= n <= 100000

Solved

주저인 n이 3의 배수인지 알면 쉽게 풀 수 있다.
먼저 정수 length를 선언하고 주어진 매개변수 n을 할당한다.

int length = n;

while문을 통해 length가 3의 배수가 될때까지 반복해준다. 이때 반복마다 length에서 5를 감소시킨다.

while(length % 3 != 0){
	length -= 5;
}

if-else를 통해 length가 0보다 작으면 -1을 출력하고 그렇지 않다면 3과 5를 조합한 수를 출력한다. 이때 감소하고 남은 length는 5의 개수이므로 length만큼 5를 먼저 나타내고 그 뒤에 붙여서 n에 length만큼 3을 나타낸다.

if(length < 0){
	System.out.println(-1);
}else{
	StringBuilder sb = new StringBuilder();

	for(int i = 0; i < length; i++){
		sb.append(5);
	}

	for(int i = 0; i < n - length; i++){
		sb.append(3);
	}

	System.out.println(sb.toString());
}

All Code

public static void decentNumber(int n) {

	int length = n;

	while(length % 3 != 0){
		length -= 5;
	}

	if(length < 0){
		System.out.println(-1);
	}else{
		StringBuilder sb = new StringBuilder();

		for(int i = 0; i < length; i++){
			sb.append(5);
		}

		for(int i = 0; i < n - length; i++){
			sb.append(3);
		}

		System.out.println(sb.toString());
	}
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글