해리의 데브로그

SWEA 1216 - 회문2

|

문제

  • SWEA 1216 - 회문2
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

for tc in range(1, 11):
    tc = int(input())
    N = 100
    result = 1

    #가로줄 확인
    Garo_lst = []
    for i in range(N):
        Data = input()
        Garo_lst.append(Data)
        #회문 길이
        for M in range(N, result, -1):
            if result > M:
                break
            for k in range(N-M+1):
                if Data[k:M+k] == Data[k:M+k][::-1]:
                    if len(Data[k:M+k]) > result:
                        result = len(Data[k:M+k])

    #세로줄 확인
    Sero_lst = []
    Sero_sub_lst = ''
    for x in range(N):
        for y in Garo_lst:
            Sero_sub_lst += y[x]
        Sero_lst.append(Sero_sub_lst)
        Sero_sub_lst =''

    for sero_data in Sero_lst:
        for M in range(N, result, -1):
            if result > M:
                break
            for k in range(N-M+1):
                if sero_data[k:M+k] == sero_data[k:M+k][::-1]:
                    if len(sero_data[k:M+k]) > result:
                        result = len(sero_data[k:M+k])

    print("#%d %s"%(tc, result))

(SW 문제해결 기본 - String) SWEA 4865 - 글자수

|

문제

  • SWEA 4865 - [파이썬 S/W 문제해결 기본 3일차] String - 글자수
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

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))

(SW 문제해결 기본 - String) SWEA 4861 - 회문

|

문제

  • SWEA 4861 - [파이썬 S/W 문제해결 기본 3일차] String - 회문
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

TC = int(input())

for tc in range(1, TC+1):
    N, M = map(int, input().split())
    result = []

    #가로줄 확인
    Garo_lst = []
    for i in range(N):
        Data = input()
        Garo_lst.append(Data)
        for i in range(len(Data)-M+1):
            if Data[i:M+i] == Data[i:M+i][::-1]:
                result.append(Data[i:M+i])

    #세로줄 확인
    Sero_lst = []
    Sero_sub_lst = ''
    for x in range(N):
        for y in Garo_lst:
            Sero_sub_lst += y[x]
        Sero_lst.append(Sero_sub_lst)
        Sero_sub_lst =''
    print(Sero_lst)

    for sero_data in Sero_lst:
        for j in range(len(sero_data)-M+1):
            if sero_data[j:M+j] == sero_data[j:M+j][::-1]:
                result.append(sero_data[j:M+j])

    # print(result)
    print("#%d %s"%(tc, result[0]))

(SW 문제해결 기본 - String) SWEA 4864 - 문자열 비교

|

문제

  • SWEA 4864 - [파이썬 S/W 문제해결 기본 3일차] String - 문자열 비교
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

TC = int(input())

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

    result = 0
    for i in range(len(str2)-len(str1)+1):
        if str2[i:i+len(str1)] == str1:
            result = 1

    print('#%d %s'%(tc, result))

SWEA 1238 - Contact(DFS)

|

문제

  • SWEA 1238 - Contact
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

  • BFS로 풀었던 문제를 DFS를 사용해서 다시 풀 수 있다. DFS로 문제를 풀 때 특별한 조건을 더 고려해야하는 점이 조금 더 까다로운 문제.
import sys
sys.stdin = open('1238_contact_DFS.txt', 'r')

def DFS(start_node):
    visited[start_node] = 1

    for next_node in range(1, N+1):
        if MyMap[start_node][next_node] and not visited[next_node]:
            visited[next_node] = 1
            if Distance[next_node] == 0:
                Distance[next_node] = Distance[start_node] + 1
            elif Distance[next_node] != 0 and Distance[next_node] > Distance[start_node] + 1:
                Distance[next_node] = Distance[start_node] + 1
            DFS(next_node)
            visited[next_node] = 0

TC = 10
for tc in range(1, TC+1):
    Len, init_num = map(int, input().split())
    Data = list(map(int, input().split()))
    N = max(Data)
    MyMap = [[0]*(N+1) for _ in range(N+1)]

    for i in range(Len//2):
        start = Data[i*2]
        end = Data[(i*2)+1]
        MyMap[start][end] = 1

    Q = []
    Distance, visited = [0]*(N+1), [0]*(N+1)

    DFS(init_num)
    # print(Distance)

    max_D = Distance[0]
    for i in range(1, len(Distance)):
        if max_D <= Distance[i]:
            max_D = Distance[i]
            index = i

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