조건에 맞게 수열 변환하기 2 - LV. 0
문제
- 정수 배열 arr이 매개변수로 주어집니다.
- arr의 원소가
- 50보다 크거나 같은 짝수라면 2를 나누고,
- 50보다 작은 홀수라면 2를 곱하고 1을 더합니다.
- 이러한 작업을 반복하다 보면
- arr(x) == arr(x + 1) 가 존재합니다.
- x의 가장 작은 값을 출력하는 문제입니다.
- 입출력 예
-
arr result [1, 2, 3, 100, 99, 98] 5
-
테스트 (인텔리제이)
- 우선 정수 배열 after와 정수 temp 변수를 선언해줍니다.
- 이후 배열의 원소들이 같아질 때까지 조건에 맞게 원소들을 계산해야 하기 때문에 while문을 사용하고 answer 값이 0이 아닐 때 멈추도록 해줍니다.
- for문으로 arr의 크기만큼 순회하도록 하여 조건에 맞게 원소들을 계산하여 after 배열에 추가해줍니다.
- 조건에 해당하지 않는 원소는 그 값 그대로 after에 담아줍니다.
- 해당 for문이 종료될 때마다 temp의 값을 1씩 증가하도록 해줍니다.
- if문으로 Arrays 클래스의 equals 메서드를 사용하여 arr과 after를 비교해주고 같은 배열이면 answer에 temp의 값을 담아주고 while을 탈출할 수 있도록 해줍니다.
- if문이 false가 나오면 arr에 after 배열을 clone하여 while문이 루프를 돌며 비교할 수 있도록 해줍니다.
package com.namji.codingtest.unsuccess;
import java.util.Arrays;
public class 조건에_맞게_수열_변환하기_2 {
public static void main(String[] args) {
/*
정수 배열 arr이 매개변수로 주어집니다.
arr의 원소가
50보다 크거나 같은 짝수라면 2를 나누고,
50보다 작은 홀수라면 2를 곱하고 1을 더합니다.
이러한 작업을 반복하다 보면
arr(x) == arr(x + 1) 가 존재합니다.
x의 가장 작은 값을 출력하는 문제입니다.
입출력 예
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 합니다.
*/
int[] arr = {1, 2, 3, 100, 99, 98};
int[] after = new int[arr.length];
int temp = 0;
int answer = 0;
while (answer == 0) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 50 && arr[i] % 2 == 0) {
after[i] = arr[i] / 2;
} else if (arr[i] < 50 && arr[i] % 2 != 0) {
after[i] = (arr[i] * 2) + 1;
} else {
after[i] = arr[i];
}
}
temp++;
if (Arrays.equals(arr, after)) {
answer = temp;
}
arr = after.clone();
}
System.out.println(answer - 1);
}
}
프로그래머스 코드
import java.util.*;
class Solution {
public int solution(int[] arr) {
int[] before = new int[arr.length];
int temp = 0;
int answer = 0;
while (answer == 0) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 50 && arr[i] % 2 == 0) {
before[i] = arr[i] / 2;
} else if (arr[i] < 50 && arr[i] % 2 != 0) {
before[i] = (arr[i] * 2) + 1;
} else {
before[i] = arr[i];
}
}
temp++;
if (Arrays.equals(arr, before)) {
answer = temp;
}
arr = before.clone();
}
return answer - 1;
}
}
'Coding Test > Java Coding Test' 카테고리의 다른 글
[프로그래머스 / 자바] - PCCE 기출문제 4번 저축 (0) | 2024.08.27 |
---|---|
[프로그래머스 / 자바] - PCCE 기출문제 5번 산책 (0) | 2024.08.26 |
[프로그래머스 / 자바] - 영어가 싫어요 (0) | 2024.08.24 |
[프로그래머스 / 자바] - 그림 확대 (0) | 2024.08.22 |
[프로그래머스 / 자바] - 같은 숫자는 싫어 (0) | 2024.08.21 |