지문 읽기 및 컴퓨터적 사고
요구사항(복잡도) 분석
문제 해결을 위한 아이디어 찾기
소스코드 설계 및 코딩
e or E 를 이용한 지수 표현 방식을 이용할 수 있음
지수 표현 방식은 임의의 큰 수를 표현하기 위해 자주 사용됨
최단 경로 알고리즘에서는 도달할 수 없는 노드에 대하여 최단 거리를 무한(INF)로 설정하곤 한다.
예를 들면, 최댓값이 10억 미만이라면 무한(INF) 의 값으로 1e9를 이용할 수 있음
10진수 체계에서는 0.3 과 0.6을 더한 값이 0.9로 정확히 떨어짐
2진수 체계에서는 0.9를 정확히 표현할 수 있는 방법이 없음
원하는 결과를 얻지 못 했을 경우에는 round()
함수를 이용하는 방법이 권장됨!
여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형
c 나 자바에서의 배열(Array)의 기능 및 연결 리스트와 유사한 기능을 지원
리스트 초기화
리스트는 []
안에 원소를 넣어 초기화하고 쉼표로 원소를 구분
비어있는 리스트를 선언할 때는 list()
, []
를 이용
리스트의 원소에 접근할 때는 인덱스(index)값을 괄호에 넣는다.
리스트의 인덱싱
리스트의 슬라이싱
arry=[[0]*m for _in range(n)]
array = [[0] * m] * n
문자열 변수를 초기화할 때는 큰따옴표(") 혹은 작은 따옴표(')를 이용
문자열 안에 큰, 작은 따옴표가 포함되어야 하는 경우가 있음
문자열 변수에 덧셈(+)를 이용하면 문자열이 더해져서 연결된다
문자열 변수를 특정한 양의 정수와 곱하는 경우, 문자열이 그 값만큼 여러 번 더해짐
문자열에 대해서도 마찬가지로 인덱싱과 슬라이싱을 이용할 수 있음
리스트와 유사하지만 다음과 같은 문법적 차이가 있다.
튜플은 한 번 선언된 값을 변경할 수 없다.
리스트는 대괄호([])
을 사용하지만, 튜플은 소괄호(())
를 이용한다
튜플은 리스트에 비해 상대적으로 공간 효율적임
서로 다른 성질의 데이터를 묶어서 관리해야 할 때
데이터의 나열을 해싱(Hasing)의 키 값으로 사용해야 할 떄
리스트보다 메모리를 효율적으로 사용해야 할 때
사전 자료형은 키 와 값의 쌍을 데이터로 가지는 자료형
사전 자료형은 키와 값을 데이터로 가지며, 원하는 '변경 불가능한(Immutable) 자료형'을 키로 사용할 수 있다
파이썬의 사전 자료형은 해시 테이블(Hash Table)을 이용하므로 데이터의 조회 및 수정에 있어서 O(1) 의 시간에 처리할 수 있음
사전 자료형에서는 키와 값을 별도로 뽑아내기 위한 메서드를 지원함
키 데이터만 뽑아서 리스트로 이용할 때는 keys()
함수를 이용
값 데이터만을 뽑아서 리스트로 이용할 때는 values()
함수를 이용
중복을 허용하지 않는다
순서가 없다
집합은 리스트 혹은 문자열을 이용해서 초기화할 수 있다.
set()
함수를 이용한다.혹은 중괄호({}) 안에 각 원소를 콤마(,)를 기준으로 구분하여 삽입함으로써 초기화 할 수 있음
데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다
리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있다
사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.
모든 프로그램은 적절한 입출력 양식을 가지고 있음
프로그램 동작의 첫 번째 단계는 데이터를 입력 받거나 생성하는 것
input()
함수는 한 줄의 문자열을 입력 받는 함수
map()
함수는 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용
예) 공백을 기준으로 구분된 데이터를 입력 받을 때는 다음과 같이 사용
list(map(int, input().split()))
예) 공백을 기준으로 구분된 데이터의 개수가 많지 않다면, 단순히 다음과 같이 사용
a,b,c = map(int, input().split())
사용자로부터 입력을 최대한 빠르게 받아야 하는 경우
파이썬의 경우 sys 라이브러리에 정의되어 있는 sys.stdin.readline()
메서드를 이용한다
rstrip()
메서드를 함께 사용한다import sys
# 문자열 입력 받기
data = sys.stdin.readline().rstrip()
print(data)
1 2 3 4 5
1 2 3 4 5
파이썬에서 기본 출력은 print()
함수를 이용한다.
print()
는 기본적으로 출력 이후에 줄 바꿈을 수행한다
end
속성을 이용할 수 있다.a = 1
b = 2
# 줄 바꿈이 일어남
print(a,b)
# 줄 바꿈이 일어나지 않음
print(7, end = " ")
print(8, end = " ")
1 2
7 8
'f'
를 붙여 사용### f-string
a = 155
print(f"토익스피킹점수는 {a}임")
토익스피킹점수는 155임
프로그램의 흐름을 제어하는 문법
조건문을 이용해 조건에 따라서 프로그램의 로직을 설정할 수 있음.
파이썬에서는 코드의 블록(Block)을 들여쓰기(Indent)로 지정한다
여기서 블록(Block)이란 특정한 기능을 수행하기 위한 한 단위의 코드 묶음이라고 표현함
들여쓰기의 경우에, 파이썬 스타일 가이드라인에서는 4개의 공백 문자를 사용하는 것을 표준으로 설정하고 있다
아래의 이미지의 2번 라인은 무조건 실행된다
if ~ elif ~ else
elif
혹은 else
부분은 경우에 따라서 사용하지 않아도 된다.### 완전 기본 학점 출력 예제
score = 85
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
else:
print("D")
B
다수의 데이터를 담는 자료형을 위해 in
연산자와 not in
연산자가 제공된다.
아무것도 처리하고 싶지 않을 때 pass
키워드를 사용한다
예) 디버깅(프로그램을 검증) 과정에서 일단 조건문의 형태만 만들어 놓고 조건문을 처리하는 부분은 비워놓고 싶은 경우
score = 85
if score >=80 :
pass #나중에 작성할 소스코드
else:
print("성적이 80 미만임;;")
print("프로그램 종료")
프로그램 종료
score = 85
if score >= 80: result = "success"
else: result = "Fail"
print(result)
success
if~else
문을 한 줄에 작성할 수 있도록 해준다score = 85
result = "success" if score >=80 else "Fail"
print(result)
success
x>0 and x<20
과 0<x<20
은 같은 결과를 반환한다.코드스타일 1
x = 15
if x>0 and x<20:
print("20 미만의 수")
코드스타일 2
x = 15
if 0<x<20:
print("20 미만의 수")
특정한 소스코드를 반복적으로 실행하고자 할 때 사용하는 문법
파이썬에서는 while
문과 for
문이 있는데, 어떤 것을 사용해도 무방하다.
for
문이 더 간결한 경우가 많다i = 1
result = 0
# i가 9보다 작거나 같을 때 아래 코드를 반복적으로 실행
while i <=9:
result += i
i += 1
print(result)
### 1부터 9 까지 홀수의 합 구하기
i = 1
result = 0
while i <=9:
if i % 2 == 1:
result += i
i += 1
print(result)
45
25
끊임 없이 반복되는 반복 구문을 의미
코딩 테스트에서 무한 루프를 구현할 일은 거의 없으니 유의 해야 한다
반복문을 작성한 뒤에는 항상 반복문을 탈출할 수 있는지 확인할 것.
반복문으로 for 문을 이용할 수도 있다.
for 문의 구조는 아래와 같은데, 특정한 변수(x, i 등...)를 이용하여 'in'
뒤에 오는 데이터(리스트, 튜플 등)에 포함 되어 있는 원소를 첫 번째 인덱스부터 차례대로 하나씩 방문한다.
for 변수 in 리스트:
실행할 소스 코드
array = [9,8,7,6,5]
for x in array:
print(x)
9
8
7
6
5
for 문에서 연속적인 값을 차례대로 순회할 때는 range()
를 주로 사용한다.
이때, range(시작 값, 끝 값 +1)
형태로 사용해야 한다
인자를 하나만 넣으면 시작값은 자동으로 0이 된다
result = 0
# i 는 1부터 9까지의 모든 값을 순회
for i in range(1,10):
result += i
print(result)
45
continue
를 사용한다result = 0
for i in range(1,10):
if i % 2 == 0:
continue
result += i
print(result)
25
break
를 사용한다i = 1
while True:
print("현재 i 의 값:", i)
if i == 5:
break
i += 1
현재 i 의 값: 1
현재 i 의 값: 2
현재 i 의 값: 3
현재 i 의 값: 4
현재 i 의 값: 5
scores = [90,85,77,65,44]
for i in range(5):
if scores[i] >= 80:
print(i+ 1,'번 학생은 합격')
1 번 학생은 합격
2 번 학생은 합격
scores = [90,85,77,65,44]
cheat_list = {2,4}
for i in range(5):
if i + 1 in cheat_list:
continue
if scores[i] >= 80:
print(i+1, "번 학생은 합격")
1 번 학생은 합격
for i in range(2,10):
for j in range(1,10):
print(i,"x",j, "=", i*j)
print()
서적 : 이것이 코딩 테스트다 with 파이썬
채널 : '동빈나' YouTube Channel