본문 바로가기

코딩테스트

[JAVA-D3] SWEA 7272 - 안경이 없어!

728x90
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

✅ 문제 요약

시력이 좋지않은 경근이는 알파벳에 존재하는 구멍을 통해 두 알파벳이 같은지 다른지 판단한다.

두 영어 문자열이 주어졌을 때 경근이의 시선에서 두 문자열이 같은지 다른지 판단한 결과를 출력하라

 

🤔 문제 풀이

수많은 구멍개수가 없는 알파벳들을 ArrayList에 넣은

코드를 작성하면 비효율적이고 else로 처리가 가능하기 때문에

상대적으로 원소 개수가 적은 1개 구멍 알파벳들과 2개 구멍 알파벳인 B를

ArrayList<Character>에 add해주었다.

 

여기서 두 문자열이 다름을 판단하는 기준은

 

1. 두 문자열의 길이가 다른 경우

2. 두 문자열의 요소 중 동일한 위치에 동일한 구멍 개수를 가진 알파벳이 존재하지 않는 경우이다.

 

2번의 예로, SAM SBM 은 다르고 SAM SPM은 같은 것이다.

본인은 위치는 고려하지 않고 두 문자열의 전체 알파벳들의 구멍 개수만 같으면 동일한 문자열이다 라는..

어이 없는 실수로 첫번째 시도때 FAIL을 받았다. 위치 또한 고려해야 함에 주의하자

 

🚨 CODE

import java.util.*;
import java.io.*;
 
public class Solution {
 
    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 testCase = Integer.parseInt(br.readLine());
 
        for (int t = 1; t <= testCase; t++) {
            ArrayList<Character> one = new ArrayList<>();
            ArrayList<Character> two = new ArrayList<>();
             
            one.add('A'); one.add('D'); one.add('O'); one.add('P');
            one.add('Q'); one.add('R');
             
            two.add('B');
             
            StringTokenizer st = new StringTokenizer(br.readLine());
            char[] left = st.nextToken().toCharArray();
            char[] right = st.nextToken().toCharArray();
             
            if(left.length != right.length) {
                bw.write(String.format("#%d DIFF\n", t));
                continue;
            }
             
            boolean isSame = true;
            for(int i = 0; i<left.length; i++) {
                char lc = left[i];
                char rc = right[i];
                int leftHole = 0; int rightHole = 0;
                 
                if(one.contains(lc)) {
                    leftHole = 1;
                }else if(two.contains(lc)){
                    leftHole = 2;
                }
                 
                if(one.contains(rc)) {
                    rightHole = 1;
                }else if(two.contains(rc)){
                    rightHole = 2;
                }
                 
                if(leftHole != rightHole) {
                    isSame = false;
                    break;
                }
            }
             
            if(isSame) {
                bw.write(String.format("#%d SAME\n", t));
            }else {
                bw.write(String.format("#%d DIFF\n", t));
            }
             
        } // testcase
        bw.flush();
    }
}
728x90
반응형