문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
Manasa는 친구들과 하이킹하고 있다. 그녀는 숫자가 적힌 돌의 흔적을 발견한다. 그녀는 그 흔적을 따라가기 시작했고 어떤 두 연속된 돌의 숫자가 두 개 중 하나의 값으로 차이가 나는 것을 알게 된다. 흔적의 끝에는 보물이 있다는 전설이 있다. 만약 Manasa가 돌의 값을 추측할 수 있다면 보물은 그녀의 것이 될 것이다.
n = 2
a = 2
b = 3
그녀는 2개의 돌을 발견했고 그것들의 차이는 a = 2, b = 3이다. 우리는 그녀가 카운트에 포함되지 않은 돌 0에서 시작하는 것을 알고 있다. 두 개의 돌 차이의 순열은 [2, 2], [2, 3], [3, 2], [3, 3]이다. 각 시나리오를 보면 돌은 [2, 4], [2, 5], [3, 5], [3, 6]이다. 마지막 돌은 4, 5, 6 중에 하나일 것이다.
돌 0에서 시작하고 추가로 찾은 돌의 수와 돌 사이의 차이가 주어졌을 때, 마지막 돌에 나타날 수 있는 모든 숫자를 계산해라. 리스트를 오름차순으로 정렬해라.
stones 함수를 완성해라.
stones 함수는 아래와 같은 매개변수를 가지고 있다.
결과로 반환할 리스트 result를 생성한다.
List<Integer> result = new ArrayList<>();
반복문을 통해 n보다 작을 때까지 반복하고, 마지막 숫자를 구해서 result에 담는다. 담을 때 result에 없는 값만 담는다.
for(int i = 0; i < n; i++){
int lastNum = i * a + (n - i - 1) * b;
// n - i - 1에서 -1을 하는 이유
// 돌 0부터 시작하기 때문에 돌 0의 개수가 이미 포함되어 있어서
if(result.indexOf(lastNum) == -1){
result.add(lastNum);
}
}
문제에 오름차순으로 정렬한 것을 반환하라고 했기 때문에 정렬하고 반환한다.
result.sort(Comparator.naturalOrder());
return result;
// 또는
// return result.sort(Comparator.naturalOrder());
public static List<Integer> stones(int n, int a, int b) {
List<Integer> result = new ArrayList<>();
for(int i = 0; i < n; i++){
int lastNum = i * a + (n - i - 1) * b;
if(result.indexOf(lastNum) == -1){
result.add(lastNum);
}
}
result.sort(Comparator.naturalOrder());
return result;
}