새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[백준] 18222 투에-모스 문자열

by 언호 2022. 1. 29.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 이해 및 접근

과정이 반복될수록 2의 제곱만큼 자릿수가 증가하는 규칙이 있어 초기 몇번째 값을 토글하여야 하는지 찾는 방식으로 접근했습니다.

2) 알고리즘

  • 분할정복

3) 풀이 코드

사용 언어 - Python

import sys
import math
sys.stdin = open('input.txt')

K = int(sys.stdin.readline())           # 찾아야하는 자릿수
patterns = '0110'                       # 가장 앞의 4자리

sign = 0                                # 반전 여부
while K >= 4:                           # 4자리 이상이면 반복
    if sign:                            # 반전 여부 토글
        sign -= 1
    else:
        sign += 1

    n = int(math.log2(K))               # 현재 자릿수보다 작거나 같은 2의 제곱값 빼기
    K = K - 2**n

    if not K:                           # 0이 되면 2의 (n-1) 제곱 다시 더하기
        K = 2**(n-1)

print(int(patterns[K-1]) ^ sign)        # 초기 몇번째 자리의 값을 토글

📝 결과 및 학습한 내용

1) 어려웠던 내용

규칙을 찾는데 다소 오랜 시간이 걸렸습니다.

2) 새롭게 학습한 내용

특별히 없습니다.


🔗 문제 링크

- https://www.acmicpc.net/problem/18222

 

18222번: 투에-모스 문자열

0과 1로 이루어진 길이가 무한한 문자열 X가 있다. 이 문자열은 다음과 같은 과정으로 만들어진다. X는 맨 처음에 "0"으로 시작한다.  X에서 0을 1로, 1을 0으로 뒤바꾼 문자열 X'을 만든다. X의 뒤에

www.acmicpc.net

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[백준] 15686 치킨 배달  (0) 2022.01.31
[백준] 3190 뱀  (0) 2022.01.30
[백준] 1963 소수 경로  (0) 2022.01.28
[백준] 9935 문자열 폭발  (0) 2022.01.27
[백준] 2110 공유기 설치  (0) 2022.01.26

댓글