Algorithms/프로그래머스

[프로그래머스] '다음에 올 숫자' - Java

LEFT 2023. 2. 24. 15:33

<문제 제시>

<문제설명>
1. 등차수열 혹은 등비수열이 배열로 주어질 때
2. 주어진 배열의 마지막 원소 다음에 올 숫자를 return

>> Point - 배열의 끝원소 접근 = array[array.length - 1]

<예시 입출력>


<문제 해결 과정>

등차수열은 증가값이 +로 이루어진 수열이다.

등비수열은 증가값이 *으로 이루어진 수열이다.

결국 마지막 원소에서 이어나가 그 다음 원소를 맞추는 문제이다.

규칙을 먼저 찾는 것이 중요했다. 

등차수열인지 등비수열인지부터 알기 위해서 원소의 값들을 비교해야했다.

 

int answer = 0;
int diff = 0;

if((common[1] - common[0]) == (common[2] - common[1])){
    diff = common[1] - common[0];
    answer = common[common.length - 1] + diff;
}

else if((common[1] / common[0]) == (common[2] / common[1])){
    diff = common[1] / common[0];
    answer = common[common.length - 1] * diff;
}

diff 변수로 그 배열의 규칙(등차수열 or 등비수열)을 찾아내었다.

그렇다면 그 차이(diff)만큼 마지막 원소에 더해주거나, 곱해주면 되는 것이었다.


<전체코드>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class next_num {
	
	public static int solution(int[] common) {
        int answer = 0;
        int diff = 0;
        
        if((common[1] - common[0]) == (common[2] - common[1])){
            diff = common[1] - common[0];
            answer = common[common.length - 1] + diff;
        }
        else if((common[1] / common[0]) == (common[2] / common[1])){
            diff = common[1] / common[0];
            answer = common[common.length - 1] * diff;
        }
        return answer;
    }
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int[] data = {1,2,3,4};

		System.out.println(solution(data));
	}
}

배열의 규칙을 찾는 과정이 간단하게 표현될 수 있다는 것을 알 수 있었다. 

물론 등차수열, 등비수열의 간단한 규칙이 큰 도움이되었지만, 흐름을 알기에는 좋은 문제였다.


문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120924

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr