알고리즘/백준

[Java, Python] 20540 연길이의 이상형 - 문자열, switch-case, enumerate

Garonguri 2022. 1. 19. 01:22
728x90

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

 

20540번: 연길이의 이상형

졸업을 앞둔 연길이는 크리스마스가 다가올수록 외로움을 느낀다. 그런 연길이를 위해 동우는 소개팅을 시켜주지는 않고 연길이의 이상향을 찾는 것을 도와주고자 한다. MBTI 신봉자인 연길이는

www.acmicpc.net

[ JAVA ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class bj20540 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String Mbti = br.readLine();
 
        for(int i=0; i<Mbti.length();i++){
            switch (Mbti.charAt(i)){
                // "", ''의 사용을 잘 구분해야 한다.
                case 'E' :
                    System.out.print('I'); break;
                case 'I' :
                    System.out.print('E'); break;
                case 'S' :
                    System.out.print('N'); break;
                case 'N' :
                    System.out.print('S'); break;
                case 'T' :
                    System.out.print('F'); break;
                case 'F' :
                    System.out.print('T'); break;
                case 'J' :
                    System.out.print('P'); break;
                case 'P' :
                    System.out.print('J'); break;
            }
 
        }
 
    }
}
cs


너무 하드코딩인 것 같아서 마음에 안드는 코드이긴 하지만 한번 풀어 보았다.

간단히 switch-case문을 사용하였다. 주의할 점은

case의 조건을 지정해줄 때 아무 생각 없이 " "을 썼더니, String이라며 인식하지 못했다.

char형일 경우 ''를, String형일 경우 ""를 써줘야 한다.

 

[Python]

 

1
2
3
4
5
6
7
8
9
10
11
from sys import stdin
 
Mbti = stdin.readline()
= ['E''S''F''J']
= ['I''N''T''P']
 
for index, char in enumerate(Mbti):
    if char in A:
        print(B[index], end="")
    if char in B:
        print(A[index], end="")
cs

java로 풀 때는 생각 없이 풀었던 코드인데, python으로 풀 때는 좀 더 파이썬 답게 풀어보고 싶었다.

그래서 enumerate를 이용한 풀이를 고안하였다.

enumerate는 parameter의 index와 해당 인덱스가 가리키는 내용을 함께 데려와서 사용할 수 있는

python만의 귀중한 자산이라고 생각한다...ㅎ

 

아무튼 MBti는 모든 알파벳이 겹치지 않으며 4가지의 위치 각각이 다른 정 반대 두개의 성향을 나타내므로

A와 B를 왜 저렇게 소환했는진 중요하지 않다.

중요한 것은 A와 B의 첫번째, 즉 index 0 인 곳에는 E/I, index 1 인 곳에는 S/N, index 2 인 곳에는 F/T,

 

index 3 인 곳에는 J/P가 온다는 것이다! 두 배열의 내용이 바뀌는 것은 상관 없다. 인덱스만 같다면.

 

[풀이]

아무튼 그래서 입력받은 MBTI를 한글자 한글자 읽으면서, 그 글자가 A배열에 포함되어 있다면

포함되지 않은 (정 반대의) mbti를 찾아야 하므로 그 반대 mbti가 위치한 B 배열의 동일 인덱스의 내용을 읽어주면 된다는 것이다.

728x90