백준 1157번 [파이썬] 단어 공부
자바로 풀어봤던 내용이지만 코테 언어를 파이썬으로 변경하기로 결정하면서 풀었던 문제를 다시 풀어보고있다.
java로 풀었을 때
- 문자열을 하나씩 잘라서 char의 값을 0으로 초기화된 배열의 인덱스에 1씩 증가 시켜주었다.
- 배열을 다시 반복하면서 배열중에 가장 큰 값을 찾고, 같은 값이 나왔다면 ?를 출력하고 그렇지 않다면 배열의 인덱스에 64를 더해 문자를 출력하였다.
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])
Author And Source
이 문제에 관하여(백준 1157번 [파이썬] 단어 공부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nnoshel/백준-1157번-파이썬-단어-공부저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)