안녕하세요
이번 포스팅은 Cos Pro 1급 java 2차 기출 5번 문제인 언제까지 오르막길이야...?!를 풀어보겠습니다.
□ 문제설명
자연수가 들어있는 배열이 있습니다. 이 배열에서, 숫자가 연속해서 증가하는 가장 긴 구간의 길이를 구하려 합니다. 단, 바로 전 숫자와 현재 숫자가 같은 경우는 증가한 것으로 보지 않습니다.
예를 들어 배열에 순서대로 [3, 1, 2, 4, 5, 1, 2, 2, 3, 4]가 들어있는 경우, [1, 2, 4, 5]가 들어있는 구간이 숫자가 연속해서 증가한 가장 긴 구간이며, 길이는 4입니다.
자연수가 들어있는 배열 arr와 arr의 길이 arr_len이 매개변수로 주어질 때, 숫자가 연속해서 증가하는 가장 긴 구간의 길이를 return 하도록 solution 함수를 완성해주세요.
□ 매개변수 설명
자연수가 들어있는 배열 arr와 arr의 길이 arr_len이 solution 함수의 매개변수로 주어집니다.
- arr_len은 2 이상 200,000 이하입니다.
- arr의 원소는 1 이상 1,000,000 이하의 자연수입니다.
□ return 값 설명
숫자가 연속해서 증가하는 가장 긴 구간의 길이를 return 해주세요.
- 길이가 2 이상인 증가하는 구간이 없다면 1을 return 해주세요.
□ 예시
arr | arr_len | return |
[3, 1, 2, 4, 5, 1, 2, 2, 3, 4] | 10 | 4 |
□ 예시설명
숫자 [1, 2, 4, 5]가 들어있는 구간이 숫자가 연속해서 증가하는 가장 긴 구간이며, 길이는 4입니다.
현재 숫자가 바로 이전 숫자와 같은 경우에는 증가했다고 보지 않습니다. [1, 2, 2, 3, 4]가 들어있는 구간은 [2, 2]가 연속해서 증가한 부분이 아니므로, [1, 2]가 들어있는 구간과 [2, 3, 4]가 들어있는 구간으로 나누어야 합니다.
※ 문제 접근 방법
(1) 배열의 길이만큼 순회하는데 시작위치는 두번째부터 합니다.
(2) 증가(asc)를 판별하기 위해 i번째와 i-1번쨰의 값을 비교하여 하락이면 -1, 같으면 0, 증가면 1을 넣습니다.
(3) 길이가 증가할 때마다 max값을 바꿔줍니다.
package uphillRoad;
public class UphillRoad {
public static void main(String[] args) {
Main sol = new Main();
int[] arr = { 3, 1, 2, 4, 5, 1, 2, 2, 3, 4 };
int ret = sol.solution(arr);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("solution 메소드의 반환 값은 " + ret + " 입니다.");
}
}
class Main {
public int solution(int[] arr) {
int answer = 0;
int asc = 0, max = 0, temp = 0;
for (int i = 1; i < arr.length; i++) {
if(arr[i-1] > arr[i]) {
asc = -1; temp = 0;
} else if(arr[i-1] > arr[i]) asc = 0;
else asc = 1;
if(asc == 1) {
temp++;
max = Math.max(max, temp);
}
}
answer = max;
return answer;
}
}
'코딩테스트 > Cos Pro 1급 Java' 카테고리의 다른 글
[Cos Pro 1급 java] [2차] 문제7) 거스름돈 구하기 - 탐욕법 문제(그리디 알고리즘) (0) | 2021.03.16 |
---|---|
[Cos Pro 1급 Java] [2차] 문제6) 로봇을 움직여주세요 (0) | 2021.03.16 |
[Cos Pro 1급 java] [2차] 문제4) 합이 k 배가 되는 수 (2) | 2021.03.16 |
[Cos Pro 1급 Java] [1차] 문제6) 체스의 나이트 (0) | 2021.03.15 |
[Cos Pro 1급 Java] [1차] 문제5) 소용돌이 수 (0) | 2021.03.15 |
댓글