다라다라V
article thumbnail
728x90
반응형

문제요약 (16113. 시그널)

1. 시그널은 "."과 "#"으로 이루어져 있다.
2. 시그널을 해독한 결과에는 반드시 숫자가 1개 이상 있다.
3. 시그널에 등장하는 모든 "#"은 올바른 숫자 패턴에 포함되어 있다.
4. 숫자와 숫자 사이에는 1열 이상의 공백이 있다. 여기서 공백은, 열의 성분이 모두 "."인 열을 의미한다.
5. 0부터 9는 아래와 같이 나타난다. 역시 "#"을 검은색, "."을 흰색으로 표시했다.

여러가지 예제들을 넣어보면서 구현이 맞는지 확인해봐야한다.
스스로 반례를 찾는게 중요하지만 시간이 없거나 정말 모르겠다면 (https://www.acmicpc.net/board/view/64923) 이 링크를 참고하길 바란다.

 

 

16113번: 시그널

zxcvber는 외계인을 연구하는 과학자다. 그는 지난 10년간 우주에서 오는 시그널를 연구했지만, 아무런 성과가 없었다. 그러던 어느 날, 갑자기 우주에서 이상한 시그널이 오기 시작했다. zxcvber는

www.acmicpc.net

 

 

풀이를 위한 부연 설명

  • 코드에서 문제 풀이 시간을 줄이기 위하여 첫 줄에서 구분이 가능하다면 구분하도록 코드를 작성하였다.
  • 코드별로 길이를 설정하여 확인한다.

 

  • 구현에 대한 자세한 개념 설명과 연관 문제는 다음 링크를 참고하면 된다.
 

[코테 알고리즘] 구현 / 관련 문제

본 글은 "나동빈"님의 [이것이 코딩 테스트다]를 참고하여 작성하였으며, 필자가 직접 문제를 풀며 관련된 문제들을 찾아 정리하였습니다. 시리즈 보기 [코테 알고리즘] 파이썬 기본 / 관련 문제

daradarav.tistory.com

 

 

코드 

import sys
input = sys.stdin.readline

n = int(input())
string = input().rstrip()

len = n // 5
signal = ["" for _ in range(len)]

for i in range(n):
    signal[i % len] += string[i]

answer = ""
width = [3, 1, 4, 3, 3, 4, 3, 3, 3, 3]
idx = 0

while idx < len:
    crt = signal[idx]

    if crt == ".....":
        idx += 1

    # 0, 1, 6, 8
    elif crt == "#####":
        if idx == len - 1 or signal[idx + 1] == ".....":
            answer += "1"
            idx += width[1]
        elif signal[idx + 1] == "#...#":
            answer += "0"
            idx += width[0]
        else:
            new = signal[idx + 2]
            if new == "#.###":
                answer += "6"
                idx += width[6]
            else:
                answer += "8"
                idx += width[8]
    # 2
    elif crt == "#.###":
        answer += "2"
        idx += width[2]

    # 3
    elif crt == "#.#.#":
        answer += "3"
        idx += width[3]

    # 4
    elif crt == "###..":
        answer += "4"
        idx += width[4]

    # 7
    elif crt == "#....":
        answer += "7"
        idx += width[7]

    # 5, 9
    else:
        new = signal[idx + 2]
        if new == "#.###":
            answer += "5"
            idx += width[5]
        else:
            answer += "9"
            idx += width[9]

print(answer)

 

 

기억할 점

  • 역시 구현은 반례를 찾는 것이 제일 중요하다.

 

반응형
profile

다라다라V

@DaraDaraV

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!