문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
셜록 홈즈는 그의 숙적 모리아티 교수가 또 다시 무시무시한 음모를 꾸미고 있다고 의심하고 있다. 셜록 홈즈의 조수, 왓슨 박사는 모리아티가 MI6의 슈퍼 컴퓨터인 더 비스트와 관련된 최근 이슈들의 원인일 수도 있다고 제안한다. 조사하기를 겸신한 직후, 셜록은 모리아티 교수에게 더 비스트를 바이러스에 감염시켰다는 자랑이 적힌 노트를 받는다. 또한 모리아티 교수는 셜록에게 정수로 된 단서를 준다. 셜록은 바이러스를 제거하는 열쇠가 그 자릿수를 가진 가장 큰 'Decent Number'를 찾는 것이라고 결론을 내린다.
'Decent Number'는 아래와 같은 특징을 가진다.
모리아티의 바이러스는 더 비스트의 파괴를 카운트 다운하는 시게를 보여주고, 시간은 빠르게 흐르고 있다. 당신의 임무는 더 비스트가 파괴되기 전에 셜록이 키를 찾는 것을 도와야 한다!
예를 들어, 숫자 55533333와 555555은 둘 다 'Decent Number'다. 왜냐하면 첫 번째 숫자에 5가 3개, 3이 5개가 있고, 두 번째 숫자에 5가 6개 있기 때문이다. 그들은 자릿수의 적적한 나눗셈을 가진 해당 길이의 숫자에 대한 가장 큰 값이다.
decentNumber 함수를 완성해라.
decentNumber 함수는 아래와 같은 매개변수를 가지고 있다.
주어진 길이에 대한 적절한 숫자를 출력하거나, 해당 길이의 적절한 숫자를 형성할 수 없는 경우에는 -1을 출력해라. 반환값이 없는 경우는 없다.
주저인 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());
}
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());
}
}