본문 바로가기

Algorithm

[Java] 백준 2495번 : 연속구간

1. 문제

https://www.acmicpc.net/problem/2495

 

2495번: 연속구간

여덟 자리의 양의 정수가 주어질 때, 그 안에서 연속하여 같은 숫자가 나오는 것이 없으면 1을 출력하고, 있으면 같은 숫자가 연속해서 나오는 구간 중 가장 긴 것의 길이를 출력하는 프로그램을

www.acmicpc.net

2. 풀이

- 이 문제의 핵심은 이전 문자를 기억하고, 이전 문자와 같은 값이 연속적으로 이루어져 있거나, 같은 문자 중에 제일 많이 나온 값을 출력하는 게 핵심이다.tmp라는

  • 변수에 charAt(0) index 0번째 값을 저장해 놓는다.
  • 이전 문자와 비교하기 위하여 이중 for 문에서 index 1번째 위치부터 하나씩 쪼개어 준다.
  • 비교하여 처음에 저장한 문자와 같으면 count 변수에 값을 1씩 증가시킨다.
  • 같지 않으면 Math.max 메소드를 활용하여 count와 max 가 큰지 비교해준다. (해당 문자열에 더 많이 중복되는 값이 있을 경우 그를 비교하기 위하여 사용하였다.)
  • 같지 않으면에서 count = 1로 초기화도 해준다. (값이 전부 다를 경우)
  • 마지막으로 제일 중요한 같지 않은 값을 저장해주고, 출력을 위해 한 번 더 비교를 해준다.

3. 코드

package baekjoon;

import java.util.Scanner;

public class Q2495 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        for (int i = 0; i < 3; i++) {
            String str = scanner.next();
            int count = 0;
            int max = 0;
            char tmp = str.charAt(0); // 처음 문자 한개 저장

            for (int j = 1; j < str.length(); j++) {
                char ch = str.charAt(j);

                if (tmp == ch) {
                    count++;
                } else {
                    max = Math.max(max, count);
                    count = 1;
                    tmp = ch;
                }
                max = Math.max(max, count);
            }
            System.out.println(max);
        }
    }
}