자바/코드트리

[코드트리] 연속되는 수 - 자바(Java)

Jakorithm 2024. 3. 16. 00:57
728x90

문제

https://www.codetree.ai/training-field/search/problems/continuous-number?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

 

N개의 숫자들이 주어졌을 때, 적절하게 숫자 K를 선택하여 입력으로 주어진 숫자들 중 숫자 K를 전부 제외했을 때 연속하여 동일한 숫자가 나오는 횟수가 최대가 되도록 하는 프로그램을 작성해 보세요. 단, 숫자 K는 반드시 입력으로 주어진 숫자들 중에 하나로 결정되어야 합니다.

 

입력 예시

9
2
7
3
7
7
3
7
5
7

 

출력 예시

4

 

 

코드

첫 번째 줄에 n이 주어지고, 두 번째 줄부터 n개의 줄에 걸쳐 숫자가 주어진다.

  • 1 <= n <= 1,000
  • 0 <= 주어지는 숫자 <= 1,000,000
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n]; // 주어지는 숫자를 담을 배열
        Set<Integer> set = new HashSet<>(); // 제외할 숫자를 담을 set

        // 주어지는 숫자들을 배열과 set에 담기
        for (int i = 0; i < n; i++) {
            int num = Integer.parseInt(br.readLine());
            arr[i] = num;
            set.add(num);
        }

        // 연속된 숫자 세기
        int result = countContinuousNumber(set, arr);

        bw.write(String.valueOf(result));
        bw.flush();
        bw.close();
    }

    private static int countContinuousNumber(Set<Integer> set, int[] arr) {
        int result = 0; // 결과를 담을 변수

        // set 순회
        for (int ignoreNumber : set) {
            int count = 1;      // count 초기화
            int temp = arr[0];  // 초기 값

            // 배열 순회하면서 조건 판단
            for (int j = 1; j < arr.length; j++) {
                // 제외할 숫자인 경우 continue;
                if (arr[j] == ignoreNumber) {
                    continue;
                }
                
                if (temp == arr[j]) { // temp와 현재 값이 같으면 count 증가
                    count++;
                } else { // 다른 경우
                    result = Math.max(result, count); // result와 count 비교 후 업데이트
                    temp = arr[j]; // 현재 값을 비교할 값으로 변경
                    count = 1;     // count 1로 변경
                }
            }

            // 반복문 마친 후 result와 count 비교
            result = Math.max(result, count);
        }

        return result;
    }
}

 

728x90