728x90
반응형
SMALL

문제 설명

2차원 정수 배열 board와 정수 k가 주어집니다.

i + j <= k를 만족하는 모든 (i, j)에 대한 board[i][j]의 합을 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 1 ≤ board의 길이 ≤ 100
  • 1 ≤ board[i]의 길이 ≤ 100
    • 1 ≤ board[i][j] ≤ 10,000
    • 모든 board[i]의 길이는 같습니다.
  • 0 ≤ k < board의 길이 + board[i]의 길이

입출력 예

board k result

[[0, 1, 2],[1, 2, 3],[2, 3, 4],[3, 4, 5]] 2 8

입출력 예 설명

입출력 예 #1

  • 입출력 예 #1의 board를 표로 나타내면 다음과 같습니다.

i \ j 0 1 2

0 0 1 2
1 1 2 3
2 2 3 4
3 3 4 5
  • i + j가 2보다 작거나 같은 항들의 합은 0 + 1 + 2 + 1 + 2 + 2 = 8이므로 8을 return 합니다.
package Lv0;
/*
2차원 정수 배열 `board`와 정수 `k`가 주어집니다.

`i` + `j` <= `k`를 만족하는 모든 (`i`, `j`)에 대한 `board[i][j]`의 합을 return 하는 solution 함수를 완성해 주세요.
 */
public class H181829 {
	public int solution(int[][] board, int k) {
		int answer = 0;

		for (int i = 0; i < board.length; i++) {
			for (int j = 0; j < board[i].length; j++) {
				if (i + j <= k) {
					answer += board[i][j];
				}
			}
		}
		return answer;
	}
}
/*
2차원 배열에서 각 원소의 인덱스 i와 j의 합이 k이하인 경우에만 해당 원소의 값을 합산하여 반환하기
 */
728x90
반응형
LIST
728x90
반응형
SMALL

문제 설명

두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.


제한사항

  • 1 ≤ a ≤ 100
  • 1 ≤ d ≤ 100
  • 1 ≤ included의 길이 ≤ 100
  • included에는 true가 적어도 하나 존재합니다.

입출력 예

a d included result

3 4 [true, false, false, true, true] 37
7 1 [false, false, false, true, false, false, false] 10

입출력 예 설명

입출력 예 #1

  • 예제 1번은 a와 d가 각각 3, 4이고 included의 길이가 5입니다. 이를 표로 나타내면 다음과 같습니다.1항 2항 3항 4항 5항
    등차수열 3 7 11 15 19
    included true false false true true
    따라서 true에 해당하는 1항, 4항, 5항을 더한 3 + 15 + 19 = 37을 return 합니다.

입출력 예 #2

  • 예제 2번은 a와 d가 각각 7, 1이고 included의 길이가 7입니다. 이를 표로 나타내면 다음과 같습니다.1항 2항 3항 4항 5항 6항 7항
    등차수열 7 8 9 10 11 12 13
    included false false false true false false false
    따라서 4항만 true이므로 10을 return 합니다.
  • package Lv0; /* 두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요. */ public class H181931 { public int solution(int a, int d, boolean[] included) { int answer = 0; for (int i = 0; i < included.length; i++) { if (included[i]) { answer += a + d * i; } } return answer; } }
728x90
반응형
LIST
728x90
반응형
SMALL

문제 설명

정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.

이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.

단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.


제한사항

  • 1 ≤ arr의 길이 ≤ 1,000,000
    • 1 ≤ arr의 원소의 값 ≤ 100

입출력 예

arr result

[1, 2, 3, 100, 99, 98] 5

입출력 예 설명

입출력 예 #1

  • 위 작업을 반복하면 다음과 같이 arr가 변합니다.

반복 횟수 arr

0 [1, 2, 3, 100, 99, 98]
1 [3, 2, 7, 50, 99, 49]
2 [7, 2, 15, 25, 99, 99]
3 [15, 2, 31, 51, 99, 99]
4 [31, 2, 63, 51, 99, 99]
5 [63, 2, 63, 51, 99, 99]
6 [63, 2, 63, 51, 99, 99]
  • 이후로 arr가 변하지 않으며, arr(5) = arr(6)이므로 5를 return 합니다.
package Lv0;

/*
정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.

이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.

단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.
 */
public class H181881 {
	public int solution(int[] arr) {
		int answer = 0;

		while (true) {
			int[] newArr = new int[arr.length];
			boolean isSame = true;

			for (int i = 0; i < arr.length; i++) {
				if (arr[i] % 2 == 0 && arr[i] >= 50) {
					newArr[i] = arr[i] / 2;
				} else if (arr[i] % 2 == 1 && arr[i] < 50) {
					newArr[i] = arr[i] * 2 + 1;
				} else {
					newArr[i] = arr[i];
				}

				if (newArr[i] != arr[i]) {
					isSame = false;
				}
			}
			answer++;

			if (isSame) {
				break;
			}
			arr = newArr;
		}
		return answer;
	}
}
테스트 1
입력값 〉	[1, 2, 3, 100, 99, 98]
기댓값 〉	5
실행 결과 〉	실행한 결괏값 6이 기댓값 5과 다릅니다.

arr(x) = arr(x+1)인 경우, 즉 배열이 변하지 않은 경우에 count 값을 반환해야 하는데 현재 코드에서는 count 값을 증가시킨 후에 반환하고 있어 실패한 것으로 추측!

package Lv0;

/*
정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱하고 다시 1을 더합니다.

이러한 작업을 x번 반복한 결과인 배열을 arr(x)라고 표현했을 때, arr(x) = arr(x + 1)인 x가 항상 존재합니다. 이러한 x 중 가장 작은 값을 return 하는 solution 함수를 완성해 주세요.

단, 두 배열에 대한 "="는 두 배열의 크기가 서로 같으며, 같은 인덱스의 원소가 각각 서로 같음을 의미합니다.
 */
public class H181881 {
	public int solution(int[] arr) {
		int answer = 0;

		while (true) {
			int[] newArr = new int[arr.length];
			boolean isSame = true;

			for (int i = 0; i < arr.length; i++) {
				if (arr[i] % 2 == 0 && arr[i] >= 50) {
					newArr[i] = arr[i] / 2;
				} else if (arr[i] % 2 == 1 && arr[i] < 50) {
					newArr[i] = arr[i] * 2 + 1;
				} else {
					newArr[i] = arr[i];
				}

				if (newArr[i] != arr[i]) {
					isSame = false;
				}
			}

			if (isSame) {
				break;
			}

			arr = newArr;
			answer++;
		}

		return answer;
	}
}
728x90
반응형
LIST

+ Recent posts