자바로 풀어봤던 내용이지만 코테 언어를 파이썬으로 변경하기로 결정하면서 풀었던 문제를 다시 풀어보고있다.
java로 풀었을 때
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine().toUpperCase();
int length = str.length(); // 문자열의 길이
int[] arr = new int[27];
Arrays.fill(arr, 0);
for(int i=0;i<length;i++){
arr[str.charAt(i)-64]++;
}
int max = 0 ;
int maxIndex = 0;
int same = 0;
char result = ' ';
for (int j = 0; j < 27; j ++){
if (arr[j] > max){
max = arr[j];
maxIndex = j;
same = 0;
}else if (max > 0 && max == arr[j]){
same++;
}
}
if (same > 0){
result = '?';
}else{
result = (char)(maxIndex + 64);
}
System.out.println(result);
}
}
파이썬으로 풀었을 때
파이썬에서는 자바와 달리 리스트를 사용하였다.
리스트의 set함수는 두 가지 특징이있다.
그렇기 때문에 입력받은 문자열에 한번이라도 등장한 알파벳이 무엇인지 알아 낼 수 있다.
count함수로 문자열에서 문자가 등장한 갯수를 알아내자.
set함수로 중복을 제거한 리스트를 반복하면서 입력받은 문자열의 개수를 알 수 있다.
count된 숫자는 리스트에 순서대로 append하자.
set함수로 중복이 제거된 리스트와 count로 문자의 갯수를 세어 리스트에 하나씩 추가한 리스트의 각 인덱스는 같은 문자를 가르키고 있다.
가장 많이 등장한 문자는 count가 가장 큰 값이다.
count가 append된 배열에서 같은 max값이 두개 이상 등장하면 ?를 출력하자
그렇지 않다면 해당 max값이 위치한 인덱스의 값을 구하고, 중복이 제거된 리스트에서 구한 인덱스 위치에 있는 값을 출력하자.
# 대문자로 변경
n = input().upper()
# 중복되는 문자 제거
n_list = list(set(n))
# n(입력받은 문자)에서 n_list의 값이 몇번 나왔는지 검사
count_list = []
for a in n_list:
count = n.count(a)
count_list.append(count)
# 리스트에서 가장 큰 값의 개수
if count_list.count(max(count_list)) >= 2 :
print("?")
else :
# 가장 큰 값이 있는 인덱스 찾기
index = count_list.index(max(count_list))
print(n_list[index])