[SWEA] <D3> 7272. 안경이 없어! (Java)

kimjy·2021년 7월 27일
0

알고리즘

목록 보기
9/11
post-thumbnail

[문제 바로가기] https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AWl0ZQ8qn7UDFAXz&categoryId=AWl0ZQ8qn7UDFAXz&categoryType=CODE&problemTitle=7272&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=3&pageSize=10&pageIndex=1

문제

어느 날 경근이는 알파벳 대문자로 이루어진 두 문자열을 비교해야 했는데, 이 날은 공교롭게도 안경이 없었다.

경근이는 매우 눈이 나빠서 안경을 벗으면 문자열을 문자 단위로 구별할 수는 있지만, 두 문자가 정확히 같은 지는 알지 못한다.

특히 알파벳 대문자 같은 경우 문자에 나 있는 구멍의 개수가 같으면 같은 문자이고, 다르면 다른 문자라고 생각한다.

예를 들어 구멍이 하나도 없는 CEFGHIJKLMNSTUVWXYZ들을 같은 문자로 생각하고,

구멍이 한 개 나 있는 ADOPQR들을 같은 문자로 생각하며,

구멍이 두 개 나 있는 유일한 문자 B는 유일하게 정확히 알 수 있다.

알파벳 대문자로 이루어진 두 문자열이 주어졌을 때, 경근이는 두 문자열이 같다고 판별하는지 다르다고 판별할 것인가?

입력

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 두 문자열이 공백 하나로 구별되어 주어진다.

각 문자열은 알파벳 대문자 만으로 이루어져 있으며, 길이는 10이하이다.

출력

각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,

경근이가 주어진 두 문자열을 같은 것으로 생각하면 “SAME”을, 다른 것으로 생각하면 “DIFF”를 출력한다.


풀이

  • 들어온 문자열을 int형 배열로 바꾸고 값은 각 대문자 구멍수로
    • CEFGHIJKLMNSTUVWXYZ = 구멍 0
    • ADOPQR = 구멍 1
    • B = 구멍 2
  • 두 문자열이 같은가?
    • 길이 다르면 DIFF, 길이 동일할 때만 비교
  • 오른쪽, 왼쪽 문자열 따로 체크

코드

import java.util.Scanner;

public class N7272 {
    static String Answer;    // DIFF or SAME
    public static void main(String[] args) {
        // TODO SWEA 안경이 없어!      
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        
        for(int test_case = 1; test_case <= T; test_case++) 
        {
            String str1 = sc.next();    //길이 10이하 문자열
            String str2 = sc.next();
            
            int left = 0;
            int right = 0;
            Answer = "SAME";
            
            for(int i = 0; i < str1.length(); i++) 
            {
                if(str1.length() != str2.length()) {
                    Answer = "DIFF";
                    break;
                }
                
                // 왼쪽 문자열 숫자 변환
                if(str1.charAt(i) == 'B') {
                    left = 2;
                }else if(str1.charAt(i) == 'A' || str1.charAt(i) == 'D' || str1.charAt(i) == 'P' || str1.charAt(i) == 'Q' 
                        			|| str1.charAt(i) == 'O' || str1.charAt(i) == 'R') {
                    left = 1;
                }else {
                    left = 0;
                }
                
                // 오른쪽 문자열 숫자 변환
                if(str2.charAt(i) == 'B') {
                    right = 2;
                }else if(str2.charAt(i) == 'A' || str2.charAt(i) == 'D' || str2.charAt(i) == 'P' || str2.charAt(i) == 'Q' 
                        			|| str2.charAt(i) == 'O' || str2.charAt(i) == 'R') {
                    right = 1;
                }else {
                    right = 0;
                }
                
                if(left != right) {
                    Answer = "DIFF";
                    break;
                }
            }
            
            System.out.println("#" + test_case + " " + Answer);
        }
        
    }

}
profile
초보 개발자

0개의 댓글