[Java, Python] 20540 연길이의 이상형 - 문자열, switch-case, enumerate
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()
A = ['E', 'S', 'F', 'J']
B = ['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 배열의 동일 인덱스의 내용을 읽어주면 된다는 것이다.