Baekjoon 문제 풀기 (1550번 : 16진수)Python

1550번 : 16진수

1. 문제읽기


16진수..?

16진수라는게 이해가 안되서 16진수부터 찾아보았다.. 대충 2진수 8진수처럼 구하는 거겠지 했는데 A~F 가 나오면서 이해가 안가기 시작..
내가 이해한 게 맞다면 10부터 15까지 쓰려면 두 자리수가 되버리니까 A~F도 그냥 “숫자”라고 생각하고 한자리 수를 맞추기 위해 치환해서 쓴 듯.
예를 들면 0, 1, 2, 3, 4, ~ , 9, A, B, C, D, E, F, 10, 11, ~ 이런 식이다.
쓰는 이유는 이진수 네자리를 16진수 한자리로 편하게 나타내기 위해서라고 한다.
이 이상은.. 일단 패스..

2. 제출 코드


처음에 A~F를 어떻게 숫자로 나타내지에서 막혔다.
elif를 쓸까 하다가 너무 지저분해보일 것 같아서 패스하고.. 얼추 틀은 잡았는데 막혀서 결국 구글링해서 참고..
dictionary를 쓰자!
자바를 배울 때 switch를 좋아했는데 파이썬으로 다시 넘어오니 파이썬 개념이 가물가물..
쨌든 dictionary 로 A~F 변환은 넘기고, for문if문 으로 조건 달아주기.

막혔던 부분

  1. A~F 치환하기 : dic 으로 해결! (검색찬스)
  2. 제곱을 어떻게 나타내나? : len() & 변수 n (검색찬스)

검색 찬스가 거의 다했다.. 허허(머쓱)

a = input()
total = 0
n = 0
my_dic = {"A": 10, "B": 11, "C": 12, "D": 13, "E": 14, "F": 15}
for i in a:
    if i in my_dic.keys():
        total += my_dic[i] * (16 ** (len(a) - 1 - n))
    else:
        total += int(i) * (16 ** (len(a) - 1 - n))
    n += 1
    
print(total)

3. 공부할 것


  1. dictionary 개념
    간단하게 자바의 switch 비슷한 개념을 쓸 때 사용하자!
    keys()메소드 : 뒤에 () 꼭 달아주자.
  2. 제곱 연산자 **
    ^ 이게 제곱 연산자 인줄…
    괄호 우선순위에 맞게 쳐주기
  3. 증감 연산자
    파이썬에는 증감 연산자 ++가 없다. 풀어서 써주기
  4. int()함수
    정답 코드를 둘러보다 발견.. int()함수로 간단하게 나타낼 수 있다.
    n진수 -> 10진수로 변환 가능!
    ```python int(string, base) # base에는 진법을 넣어주자

print(int(input(),16)) # 숏코딩 정답 코드 ```

댓글남기기