Skip to main content

61. [Java] 주사위 게임 1

https://school.programmers.co.kr/learn/courses/30/lessons/181839

  • 1부터 6까지 숫자가 적힌 주사위가 두 개 있다.
  • 두 주사위를 굴렸을 때 나온 숫자를 각각 a, b라고 했을 때 얻는 점수는 다음과 같다.
    • a와 b가 모두 홀수라면 a2 + b2 점
    • a와 b 중 하나만 홀수라면 2 × (a + b) 점
    • a와 b 모두 홀수가 아니라면 |a - b| 점
  • 두 정수 a와 b가 매개변수로 주어질 때, 얻는 점수를 return

  • a와 b는 1 이상 6 이하의 정수

정답코드

class Solution {
    public int[] solution(int[] arr, int k) {
        if (k % 2 == 1) {
            for (int i = 0; i < arr.length; i++) {
                arr[i] = arr[i] * k;
            }
        } else {
            for (int i = 0; i < arr.length; i++) {
                arr[i] = arr[i] + k;
            }
        }
        return arr;
    }
}
  • a, b 둘 다 홀수 → 제곱의 합
  • 하나만 홀수 → 2 * (a + b)
  • 듈 다 짝수 → 두 수의 차이의 절댓값

오답

for문을 써야 하고 for-each문이 안되는 이유

class Solution {
    public int[] solution(int[] arr, int k) {
        if (k % 2 == 1) {
            for (int num : arr) {
                num = num * k;
            }
        } else {
            for (int num : arr) {
                num = num + k;
            }
        }
        
        return arr;
    }
}
image.png

for (int num : arr) 는 배열의 복사본에만 영향을 주는 enhanced for-loop이다. 그래서 arr 자체는 바뀌지 않기 때문에 아무 효과 없이 원본 배열이 그대로 리턴된다. 배열의 인덱스를 이용해서 직접 값을 수정해야 한다.


image.png



출처 : chatGPT