반응형
1. 문제
어느 날 경근이는 알파벳 대문자로 이루어진 두 문자열을 비교해야 했는데, 이 날은 공교롭게도 안경이 없었다.
경근이는 매우 눈이 나빠서 안경을 벗으면 문자열을 문자 단위로 구별할 수는 있지만, 두 문자가 정확히 같은 지는 알지 못한다.
특히 알파벳 대문자 같은 경우 문자에 나 있는 구멍의 개수가 같으면 같은 문자이고, 다르면 다른 문자라고 생각한다.
예를 들어 구멍이 하나도 없는 CEFGHIJKLMNSTUVWXYZ들을 같은 문자로 생각하고,
구멍이 한 개 나 있는 ADOPQR들을 같은 문자로 생각하며,
구멍이 두 개 나 있는 유일한 문자 B는 유일하게 정확히 알 수 있다.
알파벳 대문자로 이루어진 두 문자열이 주어졌을 때, 경근이는 두 문자열이 같다고 판별하는지 다르다고 판별할 것인가?
https://swexpertacademy.com/main/code/problem/problemDetail.do
2. My 코드
import java.util.Scanner;
import java.io.FileInputStream;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
//1. 같은 문자취급하는 애들 묶어놓기
String none_0="CEFGHIJKLMNSTUVWXYZ"; //19
String one_1="ADOPQR"; //6
// 2. test case 수 받기
int test_case = sc.nextInt();
sc.nextLine();//개행문자 방지
for(int tc=1;tc<test_case+1;tc++) {
String result = "SAME"; //결과를 받을 공간
//3.문자열 띄어쓰기 구분하여 입력받기
//ABCD EFGH
String[] str = sc.nextLine().split(" ");
int[] trans_str = new int[str[0].length()];//문자열 변환과정에 쓰일 것
//3. 구현
//3-1. 길이확인 : 길이가 같지 않으면 DIFF
if(str[0].length() != str[1].length()){
result="DIFF";
}
else {
//3-2. 길이가 같으면 charAt으로 none_0(0) vs one1(1) vs B(2) 어떤 것인지 검사
//변환 과정
for(int i=0;i<str[0].length();i++) {
char target_left = str[0].charAt(i);
char target_right = str[1].charAt(i);
//왼쪽 문자열과 오른쪽 문자열이 변환되었을때 같은가? none_0
boolean none_0_ok = none_0.contains(String.valueOf(target_left)) && (none_0.contains(String.valueOf((target_right))));
boolean one_1_ok = one_1.contains(String.valueOf(target_left)) && one_1.contains(String.valueOf(target_right));
if(none_0_ok || one_1_ok) {
continue;
}else {
if(target_left=='B' && target_right=='B') continue;
else{
result="DIFF";
break;
}
}
}//변환과정 for end
}//else end
System.out.println("#"+tc+" "+result);
}//test case end
}
}
반응형
'알고리즘 > SWEA' 카테고리의 다른 글
1210. Ladder1 (0) | 2023.02.15 |
---|---|
1979. 어디에 단어가 들어갈 수 있을까 (0) | 2023.02.15 |
14178. 1차원 정원 (0) | 2023.02.14 |
1983. 조교의 성적 매기기 (0) | 2023.02.14 |
16504. Gravity (0) | 2023.02.14 |