4861. [파이썬 S/W 문제해결 기본] 3일차 - 회문

2025. 5. 20. 03:46·coding test/SW Expert Academy

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AWTQQXcKQHkDFAVT&categoryId=AWTQQXcKQHkDFAVT&categoryType=CODE&problemTitle=%ED%9A%8C%EB%AC%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

뭔가 어렵다고 느껴졌는데 생각보다 단순한 알고리즘이였다.

T=int(input())
for tc in range(1,T+1):
    #1.입력받기 #2.자료형 정의
    N,M=map(int,input().split()) #N:matrix NxN, M:회문길이
    arr=[]
    for _ in range(N):
        arr.append(list(input()))
    ans=[]

    #3.동작함수
    #가로체크
    for i in range(N):
        for j in range(N-M+1):
            rowstr=arr[i][j:j+M] #가로
            if rowstr==rowstr[::-1]:
                ans=rowstr
                break
        if ans:
            break
    #세로체크
    if not ans:
        for i in range(N-M+1):
            for j in range(N):
                colstr=[] #세로
                for m in range(M):
                    colstr.append(arr[i+m][j])
                if colstr==colstr[::-1]:
                    ans=colstr
                    break
            if ans:
                break
    #4.출력
    print(f"#{tc} {''.join(map(str,ans))}")

Python에서 sub == sub[::-1] 은 문자열을 거꾸로 출력해주는 표현식이였다는 것을 몰랐어서 좀 더 풀어서 코딩했었다.

 

<문자열 거꾸로 출력하기>

s = 'ABCDE'
print(s[::-1])  #'EDCBA'

 

아래 코드는 처음 풀었을 때의 코드이다. 

T=int(input())
for tc in range(1,T+1):
    #1.입력받기 #2.자료형 정의
    N,M=map(int,input().split()) #N:matrix NxN, M:회문길이
    arr=[]
    for _ in range(N):
        arr.append(list(input()))
    ans=[]

    #3.동작함수
    #가로체크
    for i in range(N):
        for j in range(N-M+1):
            rowstr=arr[i][j:j+M] #가로
            check_row=True #회문 체크
            for m in range(M):
                if rowstr[m]!=rowstr[-1-m]:
                    check_row=False
            if check_row==True:
                ans=rowstr
    #세로체크
    for i in range(N-M+1):
        for j in range(N):
            colstr=[] #세로
            for m in range(M):
                colstr.append(arr[i+m][j])
            check_col=True #회문 체크
            for m in range(M):
                if colstr[m]!=colstr[-1-m]:
                    check_col = False
            if check_col==True:
                ans=colstr
    #4.출력
    print(f"#{tc} {''.join(map(str,ans))}")

'coding test > SW Expert Academy' 카테고리의 다른 글

[Python] 1855번 영준이의 진짜 BFS  (1) 2025.12.14
1220. [S/W 문제해결 기본] 5일차 - Magnetic  (0) 2025.05.23
1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드  (0) 2025.05.19
4881. [파이썬 S/W 문제해결 기본] 5일차 - 배열 최소 합  (0) 2025.05.12
5185. [파이썬 S/W 문제해결 구현] 1일차 - 이진수  (0) 2025.05.09
'coding test/SW Expert Academy' 카테고리의 다른 글
  • [Python] 1855번 영준이의 진짜 BFS
  • 1220. [S/W 문제해결 기본] 5일차 - Magnetic
  • 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드
  • 4881. [파이썬 S/W 문제해결 기본] 5일차 - 배열 최소 합
wish404
wish404
자동 로그
  • wish404
    wish-log
    wish404
    • 홈
    • 태그
    • 방명록
    • github
    • 분류 전체보기 (75) N
      • log (8)
        • 블로그 관리 (5)
        • 에러 모음 (2)
      • coding test (47)
        • Algorithm (4)
        • Baekjoon (34)
        • SW Expert Academy (6)
        • etc (3)
      • 프로그래밍 언어 (7)
        • JAVA (7)
      • 데이터 엔지니어링 (5)
        • Kafka (0)
        • Spark (4)
        • Airflow (1)
        • Elasticsearch (0)
      • 머신러닝&딥러닝 (3)
        • Kaggle 스터디 (3)
        • 논문 리뷰 (0)
        • MLOps (0)
      • 신입 개발자가 되기까지 (5) N
        • 취준일기 (1)
        • SSAFY (2)
        • 프로젝트 (1) N
        • CS 공부 (1)
  • 인기 글

  • 태그

    다익스트라
    dfs
    최단 경로
    플로이드워샬
    틀린문제
    BFS
    후위순회
    벨만포드
    복습
    dp
    전위순회
    그리디
    Dijkstra
    중위순회
    싸피
    SSAFY
    heapq
    복습해야지
    dijk
    그리디 알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
wish404
4861. [파이썬 S/W 문제해결 기본] 3일차 - 회문
상단으로

티스토리툴바