알고리즘

1105 팔

민석삼 2024. 7. 17. 20:14

자바 / 실버 1 / 그리디 알고리즘

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

 

알고리즘을 생각하고 나서는 쉽게 구현할 수 있었다. 그런데 생각을 좀 얕게 했던 탓인지... 여러 반례가 많이 발견되어 3트 정도 했다.

 

주요 코드는 다음과 같다.

if (L.length() == R.length()){
            for(int i = 0; i < L.length(); i++){
                if (L.charAt(i) == R.charAt(i)){
                    if (L.charAt(i) == '8')
                        num++;
                }
                else
                    break;
            }
        }

 

알고리즘

자릿수가 다르다면, 답은 무조건 0이므로 비교할 필요가 없다.

자릿수가 같다면, 각 수의 맨 앞자리부터 같은 지를 비교하며 8의 개수를 센다.

같지 않은 자리가 등장는 순간 반복문을 종료한다.

 

 

구글링을 통해 참고했던 여러 반례들

8181 8282 -> 답: 1

1280 1281 -> 답: 1

883812 883803 -> 답: 3

8880 8890 -> 답: 3

 

 

다음은 전체 코드이다.

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

public class Main{
    private static String L, R;
    private static int num = 0;

    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
    
        StringTokenizer st = new StringTokenizer(s);
        L = st.nextToken();
        R = st.nextToken();
        
        if (L.length() == R.length()){
            for(int i = 0; i < L.length(); i++){
                if (L.charAt(i) == R.charAt(i)){
                    if (L.charAt(i) == '8')
                        num++;
                }
                else
                    break;
            }
        }
        System.out.println(num);
    }
}

'알고리즘' 카테고리의 다른 글

15903 카드 합체 놀이  (0) 2024.07.19
11501 주식  (4) 2024.07.19
1931 회의실 배정  (0) 2024.07.07
11047 동전 0  (0) 2024.07.07
11399 ATM  (0) 2024.07.06