[백준] 3706. Leonardo’s Notebook

newbieski·2026년 3월 20일

백준

목록 보기
254/255

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

문제요약

  • 알파벳 26개의 permutation으로 "ABCD.....Z"를 변환함(1:1 변환)
  • 어떤 문자열 S가 주어질때 "ABC....Z"를 두번 변환해서 가능한 문자열인지 판단
  • 500개 테스트케이스

접근법

  • 처음에는 뭔가? 함
  • 한번 변환은 항상 되겠지
  • 두번 변환으로 안되는 경우가 있나?
    • permutation 개수 만큼 S가 생성될텐데
    • 생성되는 S에 중복이 있음
    • 예를들어 S가 "ABC....Z"이면 중복하는 permutation이 있음
      • A->A, B->B, ... Z->Z가 되는 변환
      • A->B, B->A, .... Z->Z가 되는 변환
    • 따라서 안되는 문자열이 있긴 있음
  • 문제에서 주어진것은 "ABC...Z"가 -> 한번 -> 두번 -> "QWER....M"이 된 것임
    • A==>Q==>J==>P... 와 같이 두번씩 변환된 결과를 얻을 수 있음
  • 일단 잘은 모르겠지만 어떤 변환 로직이 있다고 치면
    • 예를들어, A->C->K->Z->....->A, B->F->I->...->B
    • 뭐 이런식으로 하나의 큰 사이클일수도 있고, 여러개의 사이클일수도 있음
    • 이런 변환로직에서 "두 칸"씩 변환한 결과를 얻어볼 수 있음
    • 그런데 사이클의 길이가 홀/짝일때에 따라 결과가 다름
      • 사이클의 길이가 홀이면 -> 두 칸씩 변환한 결과의 길이는 홀수임
      • 사이클의 길이가 짝수면 -> 두 칸씩 변환한 결과는 짝수/2 임
      • 이건 그림으로 그려보면 됨 예를들어
      • A->C->K->Z->P->A 일때 두칸씩 가면 A->K->P->C->Z->A, 길이 5 가 됨
      • A->C->K->Z->A 이면, A->K->A, 길이 2 또는 C->Z->C, 길이 2
  • 현재 알고 있는 정보는 두 칸씩 변환한 결과임(문제로부터 생성 가능)
    • 만약에 사이클의 길이가 홀이면 -> 변환로직 무리 없음. 만들어 볼 수 있음
    • 사이클의 길이가 짝이면 -> 애매한데?
      • 4개, 4개면 => 두개 합쳐서 만들어 볼 수 있음
      • 4개만 있으면 => 못만듬.
  • 결국 두 칸씩 변환환 결과에서 -> 사이클을 찾고 -> 길이를 식별해서 -> 짝수인데 짝이 없으면 실패, 그외는 성공
profile
newbieski

0개의 댓글