1 분 소요

문제링크

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

풀이

다른 사람들은 시간초과가 난다고 하는데 나는 시간초과 없이 성공하였다. 그러나, 파이썬 내장함수에 2진수, 8진수, 16진수 등 변환이 있는 걸 확인하였고 유용하다 싶어서 기록을 해 놓을려고 한다.

제출하여 맞은 코드


two = input() # 이진법으로 표현된 수를 문자열로 입력 받음

remainder = len(two) % 3 # remaider는 8진법은 3개씩 끊어서 계산을 해야하므로 3으로 나눴을 때 0이 아닌 부분과 0인 부분을 나눠서 계산하기 위해 선언
result = []

# 사람이 진법 변환을 계산하는 것처럼 뒤에서 부터 3개씩 끊어서 계산
for i in range(len(two)-1, remainder-1 , -3):
    num1 = int(two[i]) 
    num2 = int(two[i-1])*2
    num3 = int(two[i-2])*4
    sum = num1+num2+num3
    result.append(sum)
sum = 0
mul = 1
count = 0

# 만약 remainder가 있으면 위에서 뒤에서 부터 계산했으니 앞에 있는 것들이다

if remainder :
    for i in range(remainder-1, -1, -1):
        sum += int(two[i])*mul
        mul = mul * 2
    result.append(sum)

for i in range(len(result)-1, -1, -1):
    print(result[i], end = '')

파이썬 내장함수를 이용한 진법 변환 코드


print(oct(int(input(),2))[2:])

설명

int()에 ,를 찍고 뒤에 숫자를 넣으면 그 진법의 숫자를 받는다는 것이었다. 그리고 oct는 8진법을 의미한다. 8진법으로 숫자를 바꾸면 10진법이 아니기에 8진법을 나타내는 2글자를 숫자 앞에 넣어주는데 답안에서는 숫자만 표현해야 하므로, 앞의 두자리를 없애기 위해서 [2:]를 이용한다.

부가 설명

< 다른 진수 형태에서 10진수로 변환 >

2진수, 8진수, 16진수에서 10진수로 변환하는 방법입니다. 여기서 변환하고자 하는 진수의 타입은 문자열이며 반환되는 10진수 결과는 정수 타입입니다.


b = int('0b111100', 2)
o = int('0o74', 8)
h = int('0x3c', 16)

print(b)
print(o)
print(h)


# 60
# 60
# 60

< 10진수에서 2진수, 8진수, 16진수 변환 >

bin(), oct(), hex() 내장함수 사용 파이썬에서 제공하는 내장함수를 사용하면 쉽게 변환 할 수 있습니다.


value = 60

b = bin(value)
o = oct(value)
h = hex(value)

print(b)
print(o)
print(h)


# 0b111100
# 0o74
# 0x3c

댓글남기기