프로그래머스 - 조건에 맞게 수열 변환하기 2

박철현·2023년 8월 4일

프로그래머스

목록 보기
44/80

프로그래머스 - 조건에 맞게 수열 변환하기2

import java.util.Arrays;

class Solution {
	public int solution(int[] arr) {
		int[] after = new int[arr.length];
		int count = 0;
		int loop = 0;

		while (true) {
			// 같은 인덱스 원소 각각 서로 같은지 검사
			for (int i = 0; i < arr.length; i++) {
				if (arr[i] == after[i])
					count++;
			}

			if (count == arr.length) {
				break;
			}

			else {
				count = 0;

				// 연산 이전값 넣어주기
				// loop가 0이면 아직 반복 돌기 전이니 기존 arr값 활용
				if(loop !=0) {
					arr = Arrays.copyOfRange(after, 0, after.length);
				}

				// 배열 연산 함수
				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 == 1) {
						after[i] = arr[i] * 2 + 1;
					}
					// 위 두 경우 아니라면 기존값 유지해야 하니까 넣어주기
					else after[i] = arr[i];
				}
				// 반복 횟수 증가
				loop++;
			}
		}
		// 조건에 맞게 된다면(연산 전후가 모두 같음)
		// arr[x] == arr[x+1] 의 최소값은 1을 빼줘야 같음
		return loop-1;
	}
}
  • arr[x] == arr[x+1] 조건도 해줘야 하나 싶었는데, 안되면 문제가 안되니 별도로 해주지 않음(이후 반복부터 다 계속 같은 배열인데, 같은게 없으면 최소값이 없게됨)
  • 핵심 조건
    • 두 배열의 크키 같다 -> 배열의 크기로 초기화
    • 같은 인덱스 원소 각각 서로 같음 이부분을 놓쳐서 첨에는 왜안되나 계속 고민함..
profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글