[HackerRank] Manasa and Stones

아르당·2023년 12월 12일
0

HackerRank

목록 보기
44/109
post-thumbnail

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

문제

Manasa는 친구들과 하이킹하고 있다. 그녀는 숫자가 적힌 돌의 흔적을 발견한다. 그녀는 그 흔적을 따라가기 시작했고 어떤 두 연속된 돌의 숫자가 두 개 중 하나의 값으로 차이가 나는 것을 알게 된다. 흔적의 끝에는 보물이 있다는 전설이 있다. 만약 Manasa가 돌의 값을 추측할 수 있다면 보물은 그녀의 것이 될 것이다.

Example

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에서 시작하고 추가로 찾은 돌의 수와 돌 사이의 차이가 주어졌을 때, 마지막 돌에 나타날 수 있는 모든 숫자를 계산해라. 리스트를 오름차순으로 정렬해라.

Function Description

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

  • int n: 0이 아닌 돌의 수
  • int a: 하나의 가능한 정수 차이
  • int b: 또 다른 하나의 가능한 정수 차이

Return

  • int[]: 오름차순으로 정렬된 마지막 돌의 모든 값

Constraints

  • 1 <= T <= 10
  • 1 <= n, a, b <= 10^3

풀이

결과로 반환할 리스트 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;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글