Strings - String Formatting
binary, octal(8진법), hexadecimal(16진법), decimal(10진법)을 자동으로 처리해주는 string의 메서드가 있다는 것을 알게된 소중한 시간이었다.
문제 풀이
문제 해석
- 주어지는 정수 n에 대해 1부터 n까지에 대해 10진수, 8진수, 16진수, 2진수를 출력하라
- 정수 number라는 매개변수에 대한 print_formatted 라는 함수를 완성시킬 것
- 1부터 n까지의 위의 4개의 값은 위와 같은 순서로 한 줄에 출력되어야 하는데, 모두 2진수의 문자열 너비를 가져야 하며 서로 공백으로 구분되어야 한다.
문제 풀이
이미 주어진 코드 해석
1 2 3 4 5 6
| def print_formatted(number):
if __name__ == '__main__': n = int(input()) print_formatted(n)
|
- 해커랭크에서 정수를 입력받아 우리가 완성할 함수에 인수로 넣는 작업까지는 해주는 것을 알 수 있다.
Pseudocoding
- 2진수를 기준으로 너비를 정해주기
- 10진수는
str
메서드로 문자열로 만들어주고, 나머지는 파이썬 빌트인 메서드로 각 진법에 맞게 문자열로 만들기
- ‘0x’ 등으로 앞에 진법을 알려주는 문자는 슬라이싱해주기
- 처음에 도출한 너비만큼 공백을 가진 문자열로 만들어주기
코드 작성하기
1 2 3 4 5 6 7 8
| def print_formatted(number): width = len(bin(number))-2 for i in range(1, number+1): dec_str = str(i).rjust(width) oct_str = oct(i)[2:].rjust(width) hex_str = hex(i).upper()[2:].rjust(width) bin_str = bin(i)[2:].rjust(width) print(dec_str, oct_str, hex_str, bin_str)
|
시행착오 및 교훈
- 제목에 string formatting이 있는데 while문으로 몫과 나머지 구하면서 하나하나 진수를 만들고있었다…
- hexadecimal 구하는 법을 검색하다가 그제서야
hex
, oct
, bin
메서드가 있음을 알고 엄청나게 쉽게 풀었다.
rjust
라는 메서드로 문자열의 너비와 그 너비만큼 채워넣을 문자를 지정할수 있다는 것을 알게된 것은 큰 수확이다.
느낀 점
hanana1253문정동에서 코딩하는 하나나입니다.