[프로그래머스 LV.0] 문자열 밀기 — Python 정답 & 해설

2026. 6. 19. 22:22·코딩테스트/알고리즘

🔗 1. 문제 URL

https://school.programmers.co.kr/learn/courses/30/lessons/120921

 


 

📝 2. 문제 요구사항 정리

문자열 A와 B가 주어졌을 때, A를 오른쪽으로 몇 번 밀어야 B가 되는지 구하는 문제입니다. 만들 수 있다면 필요한 최소 횟수를 반환하고, 어떤 방식으로 밀어도 B가 될 수 없다면 -1을 반환해야 합니다.

  • 입력: 길이가 같은 두 문자열 A, B가 주어집니다.
  • 처리: A를 오른쪽으로 회전시켜 B와 같아질 수 있는지 확인합니다.
  • 반환값: 가능하면 최소 회전 횟수, 불가능하면 -1을 반환합니다.

 


 

💡 3. 핵심 개념

✔ 1) 회전 문자열의 특징 이해하기

문자열을 오른쪽으로 밀어 만든 결과들은 원래 문자열의 순환된 형태입니다. 예를 들어 B를 두 번 이어 붙인 B + B 안에는 B에서 시작할 수 있는 모든 순환 형태가 연속된 부분 문자열로 들어 있습니다.

✔ 2) B + B에서 A의 위치 찾기

A를 오른쪽으로 밀어 B를 만들 수 있다는 것은, 반대로 보면 A가 B + B 안에 부분 문자열로 존재한다는 뜻입니다. 이때 A가 처음 등장하는 위치가 A를 오른쪽으로 밀어야 하는 최소 횟수가 됩니다.

✔ 3) find()의 반환값 활용하기

Python의 find()는 찾는 문자열이 있으면 시작 인덱스를 반환하고, 없으면 -1을 반환합니다. 문제에서 요구하는 반환값과 정확히 맞아떨어지기 때문에 별도의 조건문 없이 그대로 사용할 수 있습니다.

 


 

✅ 4. 정답 Python 코드

def solution(A, B):
    # B를 두 번 더한 문자열에서 A의 시작 위치를 찾음
    return (B + B).find(A)

 


 

💬 5. 풀이하면서 느낀 점

처음에는 A를 한 칸씩 직접 밀면서 B와 같은지 확인하는 방식으로 풀 수 있다고 생각했습니다. 그런데 풀이를 정리하다 보니, 회전 문자열은 두 번 이어 붙인 문자열 안에서 부분 문자열로 확인할 수 있다는 점을 활용하면 훨씬 간단하게 풀 수 있었습니다.

그래서 B + B에서 A가 처음 등장하는 위치를 찾는 방식으로 구현했습니다. find()가 문자열을 찾지 못하면 -1을 반환해 주기 때문에, 문제의 예외 처리까지 자연스럽게 해결되는 점이 깔끔하다고 느꼈습니다.

또한, deque를 이용해 직접 회전시키며 비교하는 방식으로도 접근할 수 있지만, 이번 문제에서는 문자열의 순환 구조를 이용하는 방식이 더 간결하다는 점을 이후에 생각해볼 수 있었습니다.

 

궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요.

도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊

'코딩테스트 > 알고리즘' 카테고리의 다른 글

[프로그래머스 LV.0] 등수 매기기 — Python 정답 & 해설  (0) 2026.06.22
[프로그래머스 LV.1] 완주하지 못한 선수 — Python 정답 & 해설  (0) 2026.06.22
[프로그래머스 LV.2] 괄호 회전하기 — Python 정답 & 해설  (0) 2026.06.16
[프로그래머스 LV.0] 유한소수 판별하기 — Python 정답 & 해설  (1) 2026.06.13
[프로그래머스 LV.0] 배열 만들기 2 — Python 정답 & 해설  (0) 2026.06.11
'코딩테스트/알고리즘' 카테고리의 다른 글
  • [프로그래머스 LV.0] 등수 매기기 — Python 정답 & 해설
  • [프로그래머스 LV.1] 완주하지 못한 선수 — Python 정답 & 해설
  • [프로그래머스 LV.2] 괄호 회전하기 — Python 정답 & 해설
  • [프로그래머스 LV.0] 유한소수 판별하기 — Python 정답 & 해설
작지만 꾸준한 성장으로
작지만 꾸준한 성장으로
contact
  • 작지만 꾸준한 성장으로
    파랑새
    작지만 꾸준한 성장으로
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • IT (3)
      • 코딩테스트 (23)
        • 알고리즘 (12)
        • MYSQL (11)
      • 패션 (0)
      • 독후감 (0)
      • TIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    sql 코딩테스트
    파이썬코테
    python3
    프로그래머스 lv.2
    코테
    데이터 전처리 파이프라인
    SWEA
    프로그래머스 lv.0
    프로그래머스 lv.1
    I/O Bound
    코딩테스트
    Pandas groupby agg
    데이터 리모델링
    mysql
    와이드 포맷 롱 포맷
    알고리즘
    모델 추론
    long format
    Pandas melt
    Python
    자바
    백준
    Programmers
    CPU Bound
    프로그래머스
    Pandas pivot
    wide format
    공공데이터 전처리
    데이터베이스
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
작지만 꾸준한 성장으로
[프로그래머스 LV.0] 문자열 밀기 — Python 정답 & 해설
상단으로

티스토리툴바