본문 바로가기

Algorithm

SWEA 10729 이진수 표현 (python)

반응형

10729. 이진수 표현 D3

문제

정수 N, M 이 주어질 때, M의 이진수 표현의 마지막 N 비트가 모두 1로 켜져 있는지 아닌지를 판별하여 출력하라.

[입력]

첫 번째 줄에 테스트 케이스의 수 TC가 주어진다.
이후 TC개의 테스트 케이스가 새 줄로 구분되어 주어진다.
각 테스트 케이스는 다음과 같이 구성되었다.
첫 번째 줄에 정수 N, M이 주어진다. (1 ≤ N ≤ 30 , 0 ≤ M ≤ 108)

[출력]

각 테스트 케이스마다 한 줄씩

마지막 N개의 비트가 모두 켜져 있다면 ON

아니면 OFF 를 출력하라.


풀이과정

기존에는 스트링으로 풀었지만 이진수 표현이 필요하다는 것이 느껴졌다. 훨씬 쉽고빠르다.

스트링으로 푼것은 1000개의 테스트 케이스 중에서 2개가 맞지 않아서 고민을 해볼 필요가 있을 것 같다.

T = int(input())

for tc in range(1, T+1):
    N, M = map(int, input().split())

    # m으로 나타내줌
    m = M
    # 결괏값 초기화
    result = ''
    # 계속2로 나눠주면서 이진수 변환
    while m > 2:
        result = str(m%2) + result
        m //= 2
    # 마지막에는 다음과 같이 변환
    if m == 2:
        result = '10' + result
    else:
        result = '1' + result

    # 전원이 켜지는 조건을 만들어줌
    test = ''
    # N자리가 모두 1인 것
    for _ in range(N):
        test += '1'


    # 만약 조건을 통과한다면 ON 아니면 OFF
    if result[len(result)-N:len(result)] == test:
        power = 'ON'
    else:
        power = 'OFF'

    print("#{} {}".format(tc, power))

    T = int(input())

풀이

T = int(input())

# 파워 검사 함수
def power(n):
    # 주어진 횟수만큼 돌면서 확인
    for i in range(n):
        # 1이 아닌 것이 있다면 off
        if not M & (1 << i):
            return 'OFF'
    # 없어서 반복문을 마쳤다면 ON
    return'ON'

for tc in range(1, T+1):
    N, M = map(int, input().split())
    print("#{} {}".format(tc, power(N)))
반응형

'Algorithm' 카테고리의 다른 글

SWEA 5176 이진탐색 (python)  (0) 2021.04.13
SWEA 5177 이진 힙 (python)  (0) 2021.04.13
SWEA 5186 이진수2 (python)  (0) 2021.04.13
SWEA 5185 이진수 (python)  (0) 2021.04.13
SWEA 1240 단순 2진 암호코드 (python)  (0) 2021.04.13