본문 바로가기

Algorithm

SWEA 4865 글자수 (python)

반응형

4865. [파이썬 S/W 문제해결 기본] 3일차 - 글자수

 

[파이썬 S/W 문제해결 기본] 3일차 문제 

2021.05.17 - [Algorithm] - SWEA 4861 회문 (python)

2021.05.17 - [Algorithm] - SWEA 4864 문자열 비교 (python)

2021.05.17 - [Algorithm] - SWEA 4865 글자수 (python)

 

문제

두 개의 문자열 str1과 str2가 주어진다. 문자열 str1에 포함된 글자들이 str2에 몇 개씩 들어있는지 찾고, 그중 가장 많은 글자의 개수를 출력하는 프로그램을 만드시오.

예를 들어 str1 = “ABCA”, str2 = “ABABCA”인 경우, str1의 A가 str2에 3개 있으므로 가장 많은 글자가 되고 3을 출력한다.

파이썬의 경우 딕셔너리를 이용할 수 있다.

[입력]

첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤50

다음 줄부터 테스트 케이스 별로 길이가 N인 문자열 str1과 길이가 M인 str2가 각각 다른 줄에 주어진다. 5≤N≤100, 10≤M≤1000, N≤M

[출력]

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

 

코드

T = int(input())

# 글자수를 세는 함수
def str_count(str1, str2):
    # str1의 글자는 글자의 종류? 만 필요하고 str2에서 얼마나 있는지 세야한다.
    # 때문에 str1의 글자수의 중복을 없애기 위해 set을 취한다음 다시 리스트를 해준다.
    str_list = list(set(str1))
    # 글자수를 세기 위한 딕셔너리 초기화
    count_dict = {}
    # 중복을 제거한 글자수를 반복
    for ch in str_list:
        # 각각의 글자수에 따른 개수를 딕셔너리에 초기화 해준다.
        count_dict[ch] = 0
        # str2를 검사한다
        for s in str2:
            # 만약 해당 글자와 같다면
            if ch == s:
                # 딕셔너리에 1을 더해준다.
                count_dict[ch] += 1
    # 최대값을 초기화 해준다.
    max_value = 0
    # str1이 담긴 리스트를 반복하면서
    for ch in str_list:
        # 만약 해당 글자의 개수가 최대값 보다 크다면 갱신
        if count_dict.get(ch) > max_value:
            max_value = count_dict.get(ch)

    return max_value

for tc in range(1, T+1):
    str1 = input()
    str2 = input()
    result = str_count(str1, str2)
    print("#{} {}".format(tc, result))

반응형

'Algorithm' 카테고리의 다른 글

SWEA 4861 회문 (python)  (0) 2021.05.17
SWEA 4864 문자열 비교 (python)  (0) 2021.05.17
BOJ 14916 거스름돈 (python)  (0) 2021.05.12
BOJ 14889 스타트와 링크 (python)  (0) 2021.05.12
BOJ 1181 단어정렬 (python) 파이썬  (0) 2021.05.12