swexpertacademy.com/main/learn/course/lectureProblemViewer.do
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
두 개의 문자열 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는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.
입력 | 출력 |
3 XYPV EOGGXYPVSY STJJ HOFSTJPVPP ZYJZXZTIBSDG TTXGZYJZXZTIBSDGWQLW |
#1 2 #2 1 #3 3 |
🎀 나의 풀이
from collections import Counter
T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
str1=Counter(input())
str2=Counter(input())
cnt=0
for i in str1.keys():
if i in str2:
if cnt < str2.get(i):
cnt=str2.get(i)
print(f"#{test_case} {cnt}")
Counter로 문자열의 문자 갯수를 센다.
str2에 str1 문자가 있다면 get을 이용해서 value를 꺼낸다. cnt와 비교해서 cnt보다 크면 cnt를 갱신한다.
🎨 다른사람 풀이
def solution(pettern, string):
answer = 0
for p in pettern:
temp = 0
for s in string:
if p == s:
temp += 1
answer = max(answer, temp)
return answer
def main():
test_cases = int(input())
for test_case in range(test_cases):
pettern, string = input(), input()
print(f"#{test_case + 1} {solution(pettern, string)}")
if __name__ == '__main__':
main()
이중 for문으로 pettern과 string을 비교한다.
answer과 temp중 더 큰 값을 answer에 넣는다.
TC = int(input())
for tc in range(1, TC+1):
str1 = input()
str2 = input()
sub_cnt, cnt = 0, 0
for i in str1:
for j in str2:
if i == j:
sub_cnt += 1
if sub_cnt > cnt:
cnt = sub_cnt
sub_cnt = 0
print("#%d %d"%(tc, cnt))
문자열 str1과 str2를 반복하면서 문자 i와 j가 같다면 sub_cnt를 1증가시킨다.
sub_cnt가 cnt보다 더 크면 cnt에 sub_cnt를 할당한다.
'coding test' 카테고리의 다른 글
[파이썬] 4866. 괄호검사 (0) | 2021.01.12 |
---|---|
[파이썬] 4869. 종이붙이기 (0) | 2021.01.11 |
[파이썬] 4861. 회문 (0) | 2021.01.08 |
[파이썬] 4864. 문자열 비교 (0) | 2021.01.08 |
[파이썬] 4843. 특별한 정렬 (0) | 2021.01.08 |