코딩테스트 공부

CodeUp - Python 기초 100제

연디연디 2021. 9. 9. 13:19
728x90

 십진수 : int

 실수 : float

 아스키코드 숫자 : ord

ord( ) 는 어떤 문자의 순서 위치(ordinal position) 값을 의미한다.  
실제로 각각의 문자들에는 연속된 정수 값이 순서에 따라 부여 되어 있다. A:65, B:66, C:67 .... 
ord(c) : 문자 c 를 10진수로 변환한 값 

유니코드 문자 : chr

chr( )는 정수값->문자, ord( )는 문자->정수값 형태로 바꿔주는 서로 반대 방향으로 바꾸어 주는 기능을 한다.

 

------------------------------------------------------------------------------------------------------------------

✔ 비프시프트

참고 6046 : [기초-비트시프트연산] 정수 1개 입력받아 2배 곱해 출력하기(설명)(py)

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

▶ 예시
n = 10
print(n<<1)  #10을 2배 한 값인 20 이 출력된다.
print(n>>1)  #10을 반으로 나눈 값인 5 가 출력된다.
print(n<<2)  #10을 4배 한 값인 40 이 출력된다.
print(n>>2)  #10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.

정수 10의 2진수 표현은 ... 1010 이다.
10 << 1 을 계산하면 ... 10100 이 된다 이 값은 10진수로 20이다.
10 >> 1 을 계산하면 ... 101 이 된다. 이 값은 10진수로 5이다.

n = 10 과 같이 키보드로 입력받지 않고 직접 작성해 넣은 코드에서, 숫자로 시작하는 단어(식별자, identifier)는 자동으로 수로 인식된다.  

n = 10 에서 10 은 10진수 정수 값으로 인식된다.
변수 n 에 문자열을 저장하고 싶다면, n = "10" 또는 n = '10'으로 작성해 넣으면 되고,

 

n = 10.0 으로 작성해 넣으면 자동으로 실수 값으로 저장된다.
n = 0o10 으로 작성해 넣으면 8진수(octal) 10으로 인식되어 10진수 8값이 저장되고,
n = 0xf 나 n = 0XF 으로 작성해 넣으면 16진수(hexadecimal) F로 인식되어 10진수 15값으로 저장된다.

** python에서 실수 값에 대한 비트시프트 연산은 허용되지 않고 오류가 발생한다.
(실수 값도 컴퓨터 내부적으로는 2진수 형태로 저장되고 비트시프트 처리가 될 수 있지만, python 에서는 허용하지 않는다.)

 

------------------------------------------------------------------------------------------------------------------

✔ 불리언

참고 6058 : [기초-논리연산] 둘 다 거짓일 경우만 참 출력하기(py)

문제 2개의 정수값이 입력될 때,
그 불 값(True/False) 이 모두 False 일 때에만 True 를 출력하는 프로그램을 작성해보자.

boolean 문제

 

 

1
2
3
4
5
a, b = map(int, input().split())
if not(bool(a) or bool(b)):
    print(True)
else:
    print(False)
cs

or

1
2
3
4
5
a, b = map(int, input().split())
if not(bool(a)) and not(bool(b)):
    print(True)
else:
    print(False)
cs

 

------------------------------------------------------------------------------------------------------------------

✔ 비트

참고 6059 : [기초-비트단위논리연산] 비트단위로 NOT 하여 출력하기(설명)(py)

비트단위(bitwise)연산자 ~ 를 붙이면 된다.(~ : tilde, 틸드라고 읽는다.)

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

예를 들어 1이 입력되었을 때 저장되는 1을 32비트 2진수로 표현하면
        00000000 00000000 00000000 00000001 이고,
~1은 11111111 11111111 11111111 11111110 가 되는데 이는 -2를 의미한다.

EX) 예시
a = 1
print(~a) #-2가 출력된다.

참고
컴퓨터에 저장되는 모든 데이터들은 2진수 형태로 바뀌어 저장된다.
0과 1로만 구성되는 비트단위들로 변환되어 저장되는데,
양의 정수는 2진수 형태로 바뀌어 저장되고, 음의 정수는 "2의 보수 표현"방법으로 저장된다.

양의 정수 5를 32비트로 저장하면, 

5의 2진수 형태인 101이 32비트로 만들어져
00000000 00000000 00000000 00000101
로 저장된다.(공백은 보기 편하도록 임의로 분리)

32비트 형의 정수 0은
00000000 00000000 00000000 00000000

그리고 -1은 0에서 1을 더 빼고 32비트만 표시하는 형태로
11111111 11111111 11111111 11111111 로 저장된다.

-2는 -1에서 1을 더 빼면 된다.
11111111 11111111 11111111 11111110 로 저장된다.

이러한 내용을 간단히 표현하면, 정수 n이라고 할 때,

~n = -n - 1
-n = ~n + 1 과 같은 관계로 표현할 수 있다.

이 관계를 그림으로 그려보면 마치 원형으로 수들이 상대적으로 배치된 것과 같다.

------------------------------------------------------------------------------------------------------------------

✔ 3항 연산

참고 6063 : [기초-3항연산] 정수 2개 입력받아 큰 값 출력하기(설명)(py)

 3개의 요소로 이루어지는 3항 연산은
"x if C else y" 의 형태로 작성이 된다.
- C : True 또는 False 를 평가할 조건식(conditional expression) 또는 값
- x : C의 평가 결과가 True 일 때 사용할 값
- y : C의 평가 결과가 True 가 아닐 때 사용할 값

1
2
3
a, b = map(int, input().split())
= int(a if (a>=b) else b )
print(c)
cs

참고 6064 : [기초-3항연산] 정수 3개 입력받아 가장 작은 값 출력하기(설명)(py)

입력된 세 정수 a, b, c 중 가장 작은 값을 출력하는 프로그램을 작성해보자.

1
2
3
a, b, c = map(int, input().split())
= (a if (a<b) else b) if (a if (a<b) else b)<else c
print(d)
cs

 

------------------------------------------------------------------------------------------------------------------

6074 : [기초-반복실행구조] 문자 1개 입력받아 알파벳 출력하기(설명)(py)

영문 소문자(a ~ z) 1개가 입력되었을 때,
a부터 그 문자까지의 알파벳을 순서대로 출력해보자.

+

알파벳 문자 a의 정수값은 ord('a')로 알아낼 수 있다.

chr(정수값)을 이용하면 유니코드 문자로 출력할 수 있다.
print(..., end=' ') 와 같이 작성하면 값 출력 후 공백문자 ' '를 출력한다. 즉, 마지막에 줄을 바꾸지 않고 빈칸만 띄운다.
(end='\n'로 작성하거나 생략하면, 값을 출력한 후 마지막(end)에 줄바꿈(newline)이 된다.)

1
2
3
4
5
= ord(input())
= ord('a')
while b<=a:
  print(chr(b), end=" ")
  b += 1
cs

 

 

------------------------------------------------------------------------------------------------------------------

✔ for 문 이용한 합

참고 6079 : [기초-종합] 언제까지 더해야 할까?(py)

1, 2, 3 ... 을 계속 더해 나갈 때,
그 합이 입력한 정수(0 ~ 1000)보다 같거나 작을 때까지만
계속 더하는 프로그램을 작성해보자.

즉, 1부터 n까지 정수를 계속 더해 나간다고 할 때,
어디까지 더해야 입력한 수보다 같거나 커지는 지를 알아보고자하는 문제이다.

1
2
3
4
5
6
7
= int(input())
sum = 0
for i in range(a+1):
  sum += i
  if sum >= a:
    print(i)
    break
cs
-----------------------------------------------------------------------------------------------

range(시작, 끝, 증감) #시작 수는 포함, 끝 수는 포함하지 않음. [시작, 끝)
range(n-1, -1, -1) #n-1, n-2, ..., 3, 2, 1, 0

 

입력
번호를 부른 횟수(n, 1 ~ 10000)가 첫 줄에 입력된다.
n개의 랜덤 번호(k, 1 ~ 23)가 두 번째 줄에 공백을 사이에 두고 순서대로 입력된다.

출력
출석을 부른 번호 순서를 바꾸어 공백을 두고 출력한다.

입력 예시   
10
10 4 2 3 6 6 7 9 8 5

출력 예시
5 8 9 7 6 6 3 2 4 10

1
2
3
4
5
= int(input())
= list(map(int, input().split()))
= []
for i in range(n-1,-1,-1):
  print(k[i], end = " " )
cs

----------------------------------------------------------------------------------------------

✔ for 문 이용한 합

참고 6097 : [기초-리스트] 설탕과자 뽑기(py)

 

첫 줄에 격자판의 세로(h), 가로(w) 가 공백을 두고 입력되고,
두 번째 줄에 놓을 수 있는 막대의 개수(n)
세 번째 줄부터 각 막대의 길이(l), 방향(d), 좌표(x, y)가 입력된다.
1 <= w, h <= 100
1 <= n <= 10
d = 0 or 1
1 <= x <= 100-h
1 <= y <= 100-w

 

- 격자판의 세로(h), 가로(w), 막대의 개수(n), 각 막대의 길이(l),
- 막대를 놓는 방향(d:가로는 0, 세로는 1)과
- 막대를 놓는 막대의 가장 왼쪽 또는 위쪽의 위치(x, y)가 주어질 때,
격자판을 채운 막대의 모양을 출력하는 프로그램을 만들어보자.


출력
모든 막대를 놓은 격자판의 상태를 출력한다.
막대에 의해 가려진 경우 1, 아닌 경우 0으로 출력한다.
단, 각 숫자는 공백으로 구분하여 출력한다.

입력 예시   
5 5
3
2 0 1 1
3 1 2 3
4 1 2 5

출력 예시
1 1 0 0 0
0 0 1 0 1
0 0 1 0 1
0 0 1 0 1
0 0 0 0 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
h, w = map(int,input().split())
 
geokja = []
for i in range(h):
    geokja.append([])
    for j in range(w):
        geokja[i].append(0)
 
= int(input())
for k in range(n):
    l, d, x, y = map(int, input().split())
    if d == 0:
        for j in range(l):
            geokja[x-1][y-1+j] = 1
    else:
        for j in range(l):
            geokja[x-1+j][y-1= 1
            
for i in range(h):
    for j in range(w):
        print(geokja[i][j], end=' ')
    print()
cs
728x90

'코딩테스트 공부' 카테고리의 다른 글

프로그래머스 & 백준 커리큘럼  (0) 2021.09.07