string

SOYOUNG·2021년 4월 14일
0

알고리즘 기본

목록 보기
3/5

String

swea4861 회문

# 리스트 안에 회문 있는지 확인하고 그 회문을 반환하는 함수
def check(lst, length): # length 는 회문 길이
    for i in range(len(lst)-length+1):
        if lst[i:i+length] == lst[i:i+length][::-1]:
            return lst[i:i+length]

T = int(input())
for tc in range(1, T+1):
    N, M = map(int, input().split())
    box = [list(map(str, input())) for _ in range(N)]

    # garo
    for string in box:
        ans = check(string, M)
        if ans: # 값이 있으면
            result = ans

    # sero
    # 세로줄 리스트로 하나씩 만들기
    sero_lst = []
    for j in range(N):
        for i in range(N):
            sero_lst.append(box[i][j])

    new_sero = [sero_lst[i*N:i*N+N] for i in range(N)]
    # print(new_sero)
    for lst in new_sero:
        ans_s = check(lst, M)

        if ans_s:
            result = ans_s

    print('#{}'.format(tc), end=' ')
    print(''.join(result))

swea4864 문자열 비교

T = int(input())
for tc in range(1, T+1):
    find = input()
    string = input()
    #
    # if find in string:
    #     ans = 1
    # else:
    #     ans = 0
    #
    # print('#{} {}'.format(tc, ans))

    # 두번째 방법 (pattern check)
    s = 0 # string index
    f = 0 # find index
    while f < len(find) and s < len(string):
        if string[s] != find[f]:
            s -= f # 다음번째로
            f = -1 # 다시 처음부터
        s += 1
        f += 1

    if f == len(find): # f가 찾는 문자열 길이만큼 돌면 일치하는게 있는 것이니까
        ans = 1
    else:
        ans = 0

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

swea4865 글자수

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


    result = {}
    for i in range(len(str1)):
        cnt = 0 # 초기화
        for j in range(len(str2)):
            if str1[i] == str2[j]:
                cnt += 1
                result[str1[i]] = cnt # 그 문자열의 개수 표시


    maxx = -987654321
    for v in result.values():
        if maxx < v:
            maxx = v

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

swea1216 회문2

# 회문 있는지 확인하고 있는 회문들 중 최대 길이 리턴하는 함수
def check(lst):
    length = []
    for p in range(1, len(lst)+1): # 회문 길이
        for i in range(len(lst)-p+1):
            if lst[i:i+p] == lst[i:i+p][::-1]:
                length.append(len(lst[i:i+p]))
                break # 하나하나씩 길이 들어가니까 반복되는 수 없애기
    maxx = length[0]
    for i in range(len(length)):
        if maxx < length[i]:
            maxx = length[i]
    return maxx

for tc in range(1, 11):
    T = int(input())
    plane = [list(map(str, input())) for _ in range(100)]

    # 가로
    lst = []
    for p in plane:
        lst.append(check(p)) # 한 줄 최대 길이들을 하나씩 구하기
        maxx1 = lst[0]
        for i in range(len(lst)):
            if maxx1 < lst[i]:
                maxx1 = lst[i]

    # sero
    sero = []
    for j in range(100):
        for i in range(100):
            sero.append(plane[i][j])
    new_sero = [sero[i*100:i*100+100] for i in range(100)] # 세로로 찢은 이차원 리스트
    lst2 = []
    for new in new_sero:
        lst2.append(check(new))
        maxx2 = lst2[0]
        for i in range(len(lst2)):
            if maxx2 < lst2[i]:
                maxx2 = lst2[i]

    if maxx1 < maxx2:
        result = maxx2
    else:
        result = maxx1

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

swea3143 가장빠른문자열타이핑

T = int(input())
for tc in range(1, T+1):
    A, B = input().split()
    cnt = 0 # 패턴 확인 횟수
    ans = 0
    i = 0
    while i < len(A):
        if A[i:i+len(B)] == B:
            cnt += 1
            i += len(B)
        else:
            ans += 1
            i += 1

    # for i in range(len(A) - len(B) +1):
    #     if A[i:i+len(B)] == B:
    #         cnt += 1
    #         # ans -= 1
    #     if A[i:i+len(B)] != B and A[i+1] != B[len(B)-1]:
    #         ans += 1

    result = ans + cnt
    print('#{} {}'.format(tc, result))

swea5356 의석이의 세로로 말해요로로 말해요

T = int(input())
for tc in range(1, T+1):
    words = [list(map(str, input())) for _ in range(5)]
    sero = []
    for j in range(15):
        for i in range(len(words)):
            if len(words[i]) > j:
                sero.append(words[i][j])
            else: # j 가 리스트 길이보다 커지면 건너뛰고 쭉 진행
                continue

    print('#{}'.format(tc), end=' ')
    print(''.join(sero))

swea5432 쇠막대기 자르기

T = int(input())
for tc in range(1, T+1):
    metal = input()
    cnt = 0
    ans = 0
    for i in range(len(metal)):
        if metal[i] == '(':
            cnt += 1
            # ans += cnt
        else:
            # 레이저라면 잘못 센거니까 빼기
            # 아니라면 어차피 철봉 끝이니 배기
            cnt -= 1
            if metal[i-1] == '(':
                ans += cnt
            else:
                ans += 1 # 막대기 끝이라는 뜻
    print('#{} {}'.format(tc, ans))

swea1221 GNS

def BubbleSort(lst):
    for i in range(len(lst)-1, 0, -1):
        for j in range(0, i):
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
    return lst

T = int(input())
numbers = {"ZRO": 0, "ONE": 1, "TWO": 2, "THR": 3, "FOR": 4, "FIV": 5, "SIX": 6, "SVN": 7, "EGT": 8, "NIN": 9}
for tc in range(1, T+1):
    test_case = input()
    strings = list(map(str, input().split()))
    result = []

    for i in range(len(strings)):

        for key, value in numbers.items():
            if strings[i] == key:
                strings[i] = value
                result.append(value)

    BubbleSort(result)

    for i in range(len(result)):
        for k, v in numbers.items():
            if v == result[i]:
                result[i] = k


    print('#{}'.format(tc))
    print(*result)
profile
개발자 꿈나무

0개의 댓글