[알고리즘]_알고리즘 사전(2)

hanseungjune·2022년 10월 20일
0

알고리즘

목록 보기
2/33
post-thumbnail

📌 문자열

✏️ 회문

import sys; sys.stdin=open('input.txt','r')

T = int(input())
for tc in range(1, T+1):
    n, m = map(int, input().split())
    arr = [list(input()) for _ in range(n)]
    arr_rev = [list(x) for x in zip(*arr)]

    ans = ''
    for row in arr:
        for i in range(n-m+1):
            lst = row[i:m+i]
            lst_rev = lst[::-1]
            if lst == lst_rev:
                ans += ''.join(lst)

    for row in arr_rev:
        for i in range(n-m+1):
            lst = row[i:m+i]
            lst_rev = lst[::-1]
            if lst == lst_rev:
                ans += ''.join(lst)

    print(f'#{tc} {ans}')

솔직히 코드를 쉽게 짜기위해서는 슬라이싱 밖에 생각이 안난다.
라기보다는 반복문을 돌려서 단순히 회문에 해당하는 알파벳 갯수를 카운팅하기에는
내가 너무 게으르다... 사실 start, end 로 변수두고 비교해도 되긴함
다음부터는 꼭 그렇게 하도록 노력해야겠다...

참고로 전치행렬은 [list(x) for x in zip(*lst)] 의 형식으로 나타낼수 있음을 꼭 기억하자.

✏️ 문자열 비교

import sys; sys.stdin=open('input.txt','r')

T = int(input())
for tc in range(1, T+1):
    search = input()
    lst = input()

    sl = len(search)
    ll = len(lst)

    ans = 0
    for i in range(ll-sl+1):
        if lst[i:i+sl] == search:
            ans = 1

    print(f'#{tc} {ans}')

시작 인덱스가 될수있는 갯수를 고려하여, 슬라이싱하면서 비교하는 식으로 구하기

✏️ 글자수

import sys; sys.stdin=open('input.txt','r')

T = int(input())
for tc in range(1, T+1):
    str1 = list(input())
    str2 = list(input())
    str_dict = dict()

    for str in str1:
        if str not in str_dict:
            str_dict[str] = 0

    for key in str_dict.keys():
        for str in str2:
            if key == str:
                str_dict[key] += 1
    mx = 0
    for key, value in str_dict.items():
        if mx < value:
            mx = value

    print(f'#{tc} {mx}')

딕셔너리를 통해서 내가 구해야하는 알파벳을 담아주고, 나머지 탐색해야하는 문자열들을 하나씩 탐색해서 딕셔너리에 있는 알파벳과 동일하면 +1을 해준다.

그리고 거기서 제일 숫자 큰거를 mx 변수에 저장해서 출력한다.

profile
필요하다면 공부하는 개발자, 한승준

0개의 댓글