코드업 기초 100제 후기

김남형·2021년 7월 2일
1

기초 100제 풀이 소감

3학년 1학기 종강 후 나동빈 작가님이 추천한 코드업 기초 100제를 풀어보았다. 이게 쉬운듯 하면서도 몰랐던 부분들이 꽤나 있어서 기초를 다질 수 있는 좋은 시간이었다. 다 푸는 데 시간이 생각보다 많이 걸렸다. 중간에 나태해져서 며칠 쉬다보니 10일 정도 걸렸던 거 같다. 이제 자료구조와 알고리즘으로 넘어가서 남은 방학기간 동안 열심히 공부해야겠다.

새롭게 알게 된 내용들

1. 진수 변환

int → bin, oct, hex

>>> data = 42
>>> bin(data)
'0b101010'
>>> oct(data)
'0o52'
>>> hex(data)
'0x2a'

또 다른 방법으로는,

n = int(input())
print('%x'%n) # n에 저장되어있는 값을 16진수(hexadecimal) 소문자 형태 문자열로 출력

위와 같이 '%'를 이용하여 출력해줄 수도 있다.

bin, oct, hex → int

>>> int('0b101010', 2)
42
>>> int('0o52', 8)
42
>>> int('0x2a', 16)
42

2. ord() vs chr()

ord() : 주어진 문자의 int값을 반환
chr() : 정수 값의 유니코드 문자를 반환

>>> x = 'a'
>>> ord(x)
97
>>> chr(97)
'a'

이를 활용하면 문자 1개를 입력받아 그 다음 문자를 출력할 수 있다.

n = ord(input()) # 아스키코드로 저장 후 1을 더해서 출력
print(chr(n+1))

3. 소수점 이하 자리수 정하기

a = float(input())

print(round(a,2))
print(f'{a:.2f}')
print(format(a,".2f"))

세 가지 모두 결과는 동일하다. (단, round(a,2)는 a가 0이면 0이하 소수점은 출력되지 않는다.)

4. 비트시프트 연산

왼쪽 비트시프트(<<) : 오른쪽에 0이 주어진 개수만큼 추가
오른쪽 비트시프트(>>) : 왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가되고, 가장 오른쪽에 있는 1비트는 사라진다.

n = int(input())
print(n<<1)

print(n<<1) n을 2배 한 값이 출력된다.
print(n>>1) n을 반으로 나눈 값이 출력된다.
print(n<<2) n을 4배 한 값이 출력된다.
print(n>>2) n을 반으로 나눈 후 다시 반으로 나눈 값이 출력된다.

5. XOR 연산

XOR : 2개의 정수값이 입력될 때, 그 불 값(True/False)이 서로 다를 때에만 True를 반환

a, b = map(int,input().split())
c, d = map(bool,(a,b))
print((c and (not d)) or ((not c) and d))
0 0
c = false d = false
(false and true) or (true and false)
false or false
false
0 1
c = false d = true
(false and false) or (true and ture)
false or true
true
1 0
c = true d = false
(true and ture) or (false and false)
true or false
ture
1 1
c = true d = ture
(true and false) or (false and true)
false or false
false

6. 비트단위(bitwise) 연산자

비트단위(bitwise) 연산자는,
~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor),
<<(bitwise left shift), >>(bitwise right shift)가 있다.

예를 들어 3과 5가 입력되었을 때를 살펴보면,
3 : 00000000 00000000 00000000 00000011
5 : 00000000 00000000 00000000 00000101
3 & 5 : 00000000 00000000 00000000 00000001 이 된다.

비트단위 and 연산은 두 비트열이 주어졌을 때, 둘 다 1인 부분의 자리만 1로 만들어주는 것과 같다.

이 연산을 이용하면 어떤 비트열의 특정 부분만 모두 0으로도 만들 수 있는데
192.168.0.31 : 11000000.10101000.00000000.00011111
255.255.255.0 : 11111111.11111111.11111111.00000000
두 개의 ip 주소를 & 연산하면
192.168.0.0 : 110000000.10101000.0000000.00000000 을 계산할 수 있다.

7. 리스트 컴프리헨션

크기가 n X m인 리스트를 초기화 하려면,

array = [[0]*m for _ in range(n)]

이런 식으로 간단하게 할 수 있다.

주의할 것은,

array = [[0]*m]*n

이렇게 하면 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식되어, array[1][1] = 5를 출력해보면 array[1][1]뿐만 아니라, [0][1], [2][1], [3][1]... 모두 다 바뀌게 된다.

이제 본격적으로 자료구조, 알고리즘을 공부한 뒤 백준, 프로그래머스로 넘어가 알고리즘 문제들을 풀어봐야겠다.

0개의 댓글