백준 1157번 [파이썬] 단어 공부

11751 단어 pythonpython

자바로 풀어봤던 내용이지만 코테 언어를 파이썬으로 변경하기로 결정하면서 풀었던 문제를 다시 풀어보고있다.

문제 링크

java로 풀었을 때

  1. 문자열을 하나씩 잘라서 char의 값을 0으로 초기화된 배열의 인덱스에 1씩 증가 시켜주었다.
  2. 배열을 다시 반복하면서 배열중에 가장 큰 값을 찾고, 같은 값이 나왔다면 ?를 출력하고 그렇지 않다면 배열의 인덱스에 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);
    }
}

파이썬으로 풀었을 때

  1. 파이썬에서는 자바와 달리 리스트를 사용하였다.
    리스트의 set함수는 두 가지 특징이있다.

    1. 중복을 허용하지 않는다.
    2. 순서가 없다.

    그렇기 때문에 입력받은 문자열에 한번이라도 등장한 알파벳이 무엇인지 알아 낼 수 있다.

  2. count함수로 문자열에서 문자가 등장한 갯수를 알아내자.
    set함수로 중복을 제거한 리스트를 반복하면서 입력받은 문자열의 개수를 알 수 있다.
    count된 숫자는 리스트에 순서대로 append하자.

  3. set함수로 중복이 제거된 리스트와 count로 문자의 갯수를 세어 리스트에 하나씩 추가한 리스트의 각 인덱스는 같은 문자를 가르키고 있다.

  4. 가장 많이 등장한 문자는 count가 가장 큰 값이다.
    count가 append된 배열에서 같은 max값이 두개 이상 등장하면 ?를 출력하자

  5. 그렇지 않다면 해당 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])

좋은 웹페이지 즐겨찾기