[SWEA] 4865 글자 수

Yujin Jo·2022년 3월 28일
0

SWEA

목록 보기
14/22
post-thumbnail

문제 출처 : [SWEA] 4865 글자수
learn -> course -> programming intermediate -> string -> 글자 수

문제

두 개의 문자열 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())
for tc in range(1, T + 1):
    str1 = input()      # 문제에서 주어진 문자열 받아오기
    str2 = input()
   
    str1_dict = {}      # 동일한 문자의 수를 세기 위한 dictionary 생성

    # 짧은 문자열을 돌면서 딕셔너리에 추가 (알파벳 : 0)
    for i in range(len(str1)):
        str1_dict[str1[i]] = 0

    # 짧은 문자열의 알파벳과 긴 문자열의 알파벳이 같으면 cnt + 1, 딕셔너리 값 변경
    for i in range(len(str1)):
        val_cnt = 0
        for j in range(len(str2)):
            if str1[i] == str2[j]:
                val_cnt += 1
            str1_dict[str1[i]] = val_cnt

    max_cnt = 0     # 딕셔너리에서 cnt가 가장 많은 걸 찾기 위한 변수 초기화
    # max_cnt에 딕셔너리에서 가장 큰 vlaue값 저장
    for i in range(len(str1)):
        if max_cnt < str1_dict.get(str1[i]):
            max_cnt = str1_dict.get(str1[i])

    print('#{} {}'.format(tc, max_cnt))




풀이 방법

우선 짧은 문자열을 돌면서 해당 알파벳을 키로 가지고 value는 0으로 가지는 딕셔너리를 생성해주었다. 그리고 긴 문자열과 짧은 문자열을 비교하면서 동일한 알파벳을 가졌을 경우 해당 딕셔너리의 value값을 1씩 증가시켜 주었다. 최종적으로 딕셔너리를 순회하면서 가장 큰 value 값을 가져와서 출력해주었다.

profile
일단 해보자

0개의 댓글