티스토리 뷰

반응형

https://www.acmicpc.net/problem/17609

 

17609번: 회문

각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 구현
  • 문자열
  • 그리디 알고리즘
  • 두 포인터

 


 

⊙ 문제 접근 과정

 

여러 체크포인트 변수를 생성하고 활용하여 회문인지 유사회문인지 그 외인지 검사했다.

 

회문일 경우 여러 체크포인트가 필요 없다.

유사회문 검사 경우에 복사본을 이용했는데 그때 여러 체크포인트가 필요했다.


 

⊙ 문제 풀이

 

T = int(input()) #반복횟수

for _ in range(T):
    check = 0 #초기화
    indx = 0
    s1 = input() #값 입력받기
    s2=s1 #복사본 생성

    for i in range(int(len(s1)/2)): #검사
        if(s1[i] != s1[len(s1) -i -1]):
            check = 2 #대칭이 아니면 해당 인덱스 저장, 체크 표시
            indx = i
            break
    
    if(not check): print(0) #체크가 안 되어 있다면 회문
    else:
        check = 0 #초기화
        check1 = 0
        check2 = 0
        indx2 = len(s1)-indx-1 #해당 인덱스 반대편 인덱스 위치 저장
        s1 = s1[:indx] +s1[indx+1:] #대칭이 아닌 요소 지우기
        s2 = s2[:indx2] + s2[indx2+1:]

        for i in range(int(len(s2)/2)): #검사
            if(s2[i] != s2[len(s2) -i -1]): check1=2
            if(s1[i] != s1[len(s1) -i -1]): check2=2
        if(check1+check2 == 4): check=2
        if(not check): print(1) #체크 X시 유사회문
        else: print(2) #그 외

⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함