Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

Algorithm

CodeUp 기초 100제 [기초-출력변환] 문제풀이 (#1031~#1037)

Kellyyyy 2020. 11. 23. 08:00

문제 풀이 전에 기본 개념을 정리해보자.

1. 10진수 → 2진수, 8진수, 16진수

 

10진수를 다른 진수형태로 변환하는 방법은 2가지가 있다. 

 

(1)  진수별 변환함수 사용

Python 내장함수를 통해 10진수를 2진수, 8진수, 16진수의 문자열로 변환할 수 있다.

진수 함수
2진수 bin()
8진수 oct()
16진수 hex()
a = 15

print('2진수:' + bin(a))
print('8진수:' + oct(a))
print('16진수:' + hex(a))

###결과###
#2진수:0b1111
#8진수:0o17
#16진수:0xf

출력결과를 보면 숫자 앞에 각각 0b, 0o, 0x가 붙어있는 것을 알 수 있다. 이것은 뒤에 있는 숫자가 어떤 진수의 숫자인지 나타내는 접두사이다. 즉 0b1111은 0b + 1111이 조합된 문자열로 1111(2)를 의미한다. 이 사실을 알면 CodeUp #1036 문제를 절반 정도 풀 수 있다. 

 

(2) format() 함수 사용

 

format() 함수의 2번째 인자로 진수형태를 지정하여 변환할 수 있다.

a = 15

print(format(a, '#b'))
print(format(a, '#o'))
print(format(a, '#x'))

####결과####
0b1111
0o17
0xf

이때, #을 빼면 접두사를 제외한 변환한 값 만을 출력한다.

a = 15

print(format(a, 'b'))
print(format(a, 'o'))
print(format(a, 'x'))

####결과####
1111
17
f

2. 2진수, 8진수, 16진수 → 10진수

 

다른 진수형태를 10진수를 변환하기 위해서는 int()함수를 사용할 수 있다. int(변환할 값, 변환할 값의 진수형태)로 지정하여 사용하면 된다. 

print(int('0b1111',2))
print(int('0o17',8))
print(int('0xf',16))

####결과####
15
15
15

두 번째 인자의 기본값은 10이기 때문에 하나의 인자만 사용하면 10진수로 변환되었던 것이다.


#1031.

a = int(input())
print('%o' % a)

#10
#12

 

#1032.

a = int(input())
print('%x' % a)

#255
#ff

 

#1033.

a = int(input())
print('%X' % a)

#255
#FF

 

#1034.

 

a = '0o' + input()
print(int(a,8))

#13
#11

 

#1035 : [기초-출력변환] 16진 정수 1개 입력받아 8진수로 출력하기(설명)

Q) 16진수로 입력된 정수 1개를 8진수로 바꾸어 출력해보자.

이 문제를 풀기 위해서는

입력 받은 10진수를 16진수로 바꿔주고, --- 1)

16진수를 8진수로 바꿔줘야한다. ---2)

 

1) 입력 받은 10진수를 16진수로 바꿔주기

 

C 언어에서는 입력 받는 데이터의 진수형태를 세팅해서 받을 수 있는 함수가 있는 것 같은데,, Python은 아무리 찾아도 그런 기능을 찾기가 어려웠다. (혹시 아는 분 있으면 댓글 부탁..) 그런데 앞에 문자를 붙임으로써 진수형태를 지정할 수 있다는 사실을 알고 실마리를 찾았다.

 

# Step1. 10진수 --> 16진수
a = input()
a = '0x' + a # 입력문자열을 16진수 문자열로 변환

 

2) 16진수를 8진수로 바꿔주기

 

16진수를 바로 8진수로 바꿔줄 수 있을 것 같지만 사실 아니다. oct()나 format()함수의 인자는 모두 정수로 받아야하기 때문에 16진수를 10진수로 한번 바꿔주고 이를 다시 8진수로 바꿔주는 과정을 거쳐야한다. 

# Step2. 16진수 --> 10진수 --> 8진수
a_10 = int(a, 16)
print(format(a_10,'o'))

## 결과 ##
입력 : f
출력 : 17

변환한 값 자체만 출력해야하기 때문에 format() 함수에서 #을 제외한 파라미터를 사용했다.

 

정답

# Step1. 10진수 --> 16진수
a = input()
a = '0x' + a # 입력문자열을 16진수 문자열로 변환

# Step2. 16진수 --> 10진수 --> 8진수
a_10 = int(a, 16)
print(format(a_10,'o'))

## 결과 ##
입력 : f
출력 : 17

 

#1036.

a = input()
print(ord(a))

#A
#65

ord() 함수를 이용하면 문자를 아스키 코드로 변환할 수 있다.

 

#1037.

a = int(input())
print(chr(a))

#65
#A

chr() 함수를 이용하면 아스키코드를 문자로 변환할 수 있다.