이코테 with Python 리뷰+1

LEE EUI JOO·2023년 3월 8일
0

CodingTest

목록 보기
1/6

1. 시간제한


2. 알고리즘 문제 해결 과정

일반적으로 대부분의 문제 출제자들은 핵심 아이디어를 캐치한다면, 간결하게 소스코드를 작성할 수 있는 형태로 문제를 출제함!

  1. 지문 읽기 및 컴퓨터적 사고

  2. 요구사항(복잡도) 분석

  3. 문제 해결을 위한 아이디어 찾기

  4. 소스코드 설계 및 코딩


3. 자료형 기억할 것

지수 표현 방식

  • e or E 를 이용한 지수 표현 방식을 이용할 수 있음

  • 지수 표현 방식은 임의의 큰 수를 표현하기 위해 자주 사용됨

  • 최단 경로 알고리즘에서는 도달할 수 없는 노드에 대하여 최단 거리를 무한(INF)로 설정하곤 한다.

  • 예를 들면, 최댓값이 10억 미만이라면 무한(INF) 의 값으로 1e9를 이용할 수 있음

컴퓨터 시스템은 실수 정보를 표현하는 정확도에 한계를 가진다.

  • 10진수 체계에서는 0.3 과 0.6을 더한 값이 0.9로 정확히 떨어짐

  • 2진수 체계에서는 0.9를 정확히 표현할 수 있는 방법이 없음

  • 원하는 결과를 얻지 못 했을 경우에는 round() 함수를 이용하는 방법이 권장됨!


1. 리스트 자료형

  • 여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형

  • c 나 자바에서의 배열(Array)의 기능 및 연결 리스트와 유사한 기능을 지원

  • 리스트 초기화

    • 리스트는 []안에 원소를 넣어 초기화하고 쉼표로 원소를 구분

    • 비어있는 리스트를 선언할 때는 list(), []를 이용

    • 리스트의 원소에 접근할 때는 인덱스(index)값을 괄호에 넣는다.

      • 인덱스는 0부터 시작
  • 리스트의 인덱싱

    • 인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것을 인덱싱(indexing) 이라고 함
    • 파이썬의 인덱스 값은 양의 정수와 음의 정수를 모두 사용할 수 있음
    • 음의 정수를 넣으면 원소를 거꾸로 탐색하게 됨
  • 리스트의 슬라이싱

    • 연속적인 위치를 갖는 원소들을 가져와야 할 때는 슬라이싱을 이용
    • 대괄호 안에 콜론(:)을 넣어서 시작 인덱스와 끝 인덱스를 설정할 수 있음
    • 끝 인덱스는 실제 인덱스보다 1을 더 크게 설정

리스트 컴프리핸션

  • 2차원 리스트를 초기화할 때 효과적으로 사용
  • 특히, N X M 크기의 2차원 리스트를 한 번에 초기화 해야 할 때 매우 유용
  • 예) arry=[[0]*m for _in range(n)]
  • 만약 2차원 리스트를 초기화할 때 다음과 같이 작성하면 예기치 않는 결과가 나올 수 있음
  • 예) array = [[0] * m] * n
    • 위 코드는 전체 리스트 안에 포함된 각 리스트가 모두 같은 객체로 인식됨

리스트 관련 기타 메서드


2. 문자열 자료형

  • 문자열 변수를 초기화할 때는 큰따옴표(") 혹은 작은 따옴표(')를 이용

  • 문자열 안에 큰, 작은 따옴표가 포함되어야 하는 경우가 있음

    • 전체 문자열을 큰따옴표로 구성하는 경우, 내부적으로 작은 따옴표를 포함할 수 있음
    • 전체 문자열을 작은따옴표로 구성하는 경우, 내부적으로 큰 따옴표를 포함할 수 있음
    • 혹은 백슬래시() 를 사용하면, 큰따옴표나 작은 따옴표를 원하는 만큼 포함시킬 수 있음

문자열 연산

  • 문자열 변수에 덧셈(+)를 이용하면 문자열이 더해져서 연결된다

  • 문자열 변수를 특정한 양의 정수와 곱하는 경우, 문자열이 그 값만큼 여러 번 더해짐

  • 문자열에 대해서도 마찬가지로 인덱싱과 슬라이싱을 이용할 수 있음

    • 다만, 문자열은 특정 인덱스의 값을 변경할 수 는 없음

3. 튜플 자료형

  • 리스트와 유사하지만 다음과 같은 문법적 차이가 있다.

    • 튜플은 한 번 선언된 값을 변경할 수 없다.

    • 리스트는 대괄호([])을 사용하지만, 튜플은 소괄호(())를 이용한다

  • 튜플은 리스트에 비해 상대적으로 공간 효율적임

튜플을 사용하면 좋은 경우

  • 서로 다른 성질의 데이터를 묶어서 관리해야 할 때

    • 최단 경로 알고리즘에서는 (비용, 노드 번호)의 형태로 튜플 자료형을 자주 사용
  • 데이터의 나열을 해싱(Hasing)의 키 값으로 사용해야 할 떄

    • 튜플은 변경이 불가능하므로 리스트와 다르게 키 값으로 사용될 수 있음
  • 리스트보다 메모리를 효율적으로 사용해야 할 때


4. 사전 자료형

  • 사전 자료형은 키 와 값의 쌍을 데이터로 가지는 자료형

    • 리스트나 튜플이 값을 순차적으로 저장하는 것과는 대비된다.
  • 사전 자료형은 키와 값을 데이터로 가지며, 원하는 '변경 불가능한(Immutable) 자료형'을 키로 사용할 수 있다

  • 파이썬의 사전 자료형은 해시 테이블(Hash Table)을 이용하므로 데이터의 조회 및 수정에 있어서 O(1) 의 시간에 처리할 수 있음

  • 사전 자료형에서는 키와 값을 별도로 뽑아내기 위한 메서드를 지원함

    • 키 데이터만 뽑아서 리스트로 이용할 때는 keys() 함수를 이용

    • 값 데이터만을 뽑아서 리스트로 이용할 때는 values() 함수를 이용


5. 집합 자료형

  • 중복을 허용하지 않는다

  • 순서가 없다

  • 집합은 리스트 혹은 문자열을 이용해서 초기화할 수 있다.

    • 이때, set()함수를 이용한다.
  • 혹은 중괄호({}) 안에 각 원소를 콤마(,)를 기준으로 구분하여 삽입함으로써 초기화 할 수 있음

  • 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리할 수 있다

집합 자료형의 연산

  • 기본적인 집합 연산으로는 합집합, 교집합, 차집합 연산 등이 있음

사전 자료형과 집합 자료형의 특징

  • 리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있다

  • 사전 자료형과 집합 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.

    • 사전의 키(key) 또는 원소(Element)를 이용해 O(1) 의 시간 복잡도로 조회한다

4. 기본 입출력

  • 모든 프로그램은 적절한 입출력 양식을 가지고 있음

  • 프로그램 동작의 첫 번째 단계는 데이터를 입력 받거나 생성하는 것

    • 예) 학생의 성적 데이터가 주어지고, 이를 내림차순으로 정렬한 결과를 출력하는 프로그램

1. 자주 사용되는 표준 입력 방법

  • input() 함수는 한 줄의 문자열을 입력 받는 함수

  • map() 함수는 리스트의 모든 원소에 각각 특정한 함수를 적용할 때 사용

  • 예) 공백을 기준으로 구분된 데이터를 입력 받을 때는 다음과 같이 사용

    • list(map(int, input().split()))
  • 예) 공백을 기준으로 구분된 데이터의 개수가 많지 않다면, 단순히 다음과 같이 사용

    • a,b,c = map(int, input().split())

2. 빠르게 입력 받기

  • 사용자로부터 입력을 최대한 빠르게 받아야 하는 경우

  • 파이썬의 경우 sys 라이브러리에 정의되어 있는 sys.stdin.readline() 메서드를 이용한다

    • 단, 입력 후 엔터(enter)가 줄 바꿈 기호로 입력되므로 rstrip() 메서드를 함께 사용한다
import sys
# 문자열 입력 받기
data = sys.stdin.readline().rstrip()
print(data)

1 2 3 4 5
1 2 3 4 5

3. 자주 사용되는 표준 출력 방법

  • 파이썬에서 기본 출력은 print() 함수를 이용한다.

    • 각 변수를 콤마(,)를 이용하여 띄어쓰기로 구분하여 출력할 수 있다.
  • print()는 기본적으로 출력 이후에 줄 바꿈을 수행한다

    • 줄 바꿈을 원치 않는 경우 end속성을 이용할 수 있다.
a = 1 
b = 2
# 줄 바꿈이 일어남
print(a,b)
# 줄 바꿈이 일어나지 않음
print(7, end = " ")
print(8, end = " ")

1 2
7 8 

f-string 예제

  • 파이썬 3.6 부터 사용 가능하며, 문자열 앞에 접두사 'f'를 붙여 사용
  • 중괄호 안에 변수명을 기입하여 간단히 문자열과 정수를 함께 넣을 수 있음
### f-string
a = 155
print(f"토익스피킹점수는 {a}임")

토익스피킹점수는 155

5. 조건문

1. 조건문

  • 프로그램의 흐름을 제어하는 문법

  • 조건문을 이용해 조건에 따라서 프로그램의 로직을 설정할 수 있음.

  • 파이썬에서는 코드의 블록(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

2. 비교 연산자

  • 주의해야할 것은 딱히 없고 '=' 과 '==' 의 차이점은 알고있어야....? 이정도는 알잖아

3. 논리 연산자

  • 논리 값 (True / False) 사이의 연산을 수행할 때 사용

4. 파이썬의 기타 연산자

  • 다수의 데이터를 담는 자료형을 위해 in 연산자와 not in 연산자가 제공된다.

    • 리스트, 튜플, 문자열, 딕셔너리 모두에서 사용이 가능하다

5. 파이썬의 pass 키워드

  • 아무것도 처리하고 싶지 않을 때 pass 키워드를 사용한다

  • 예) 디버깅(프로그램을 검증) 과정에서 일단 조건문의 형태만 만들어 놓고 조건문을 처리하는 부분은 비워놓고 싶은 경우

score = 85

if score >=80 :
    pass #나중에 작성할 소스코드
else:
    print("성적이 80 미만임;;")
print("프로그램 종료")

프로그램 종료

6. 조건문의 간소화

  • 조건문에서 실행될 소스코드가 한 줄인 경우, 굳이 줄 바꿈을 하지 않고도 간략하게 표현할 수 있다.
score = 85
if score >= 80: result = "success"
else: result = "Fail"
print(result)

success
  • 조건부 표현식(Conditional Expression) 은 if~else 문을 한 줄에 작성할 수 있도록 해준다
score = 85
result = "success" if score >=80 else "Fail"
print(result)

success

7. 파이썬 조건문 내에서의 부등식

  • 다른 프로그래밍 언어와 다르게 파이썬은 조건문 안에서 수학의 부등식을 그대로 사용할 수 있다.
  • 예) x>0 and x<200<x<20 은 같은 결과를 반환한다.

코드스타일 1

x = 15
if x>0 and x<20:
    print("20 미만의 수")

코드스타일 2

x = 15
if 0<x<20:
    print("20 미만의 수")    

6. 반복문

  • 특정한 소스코드를 반복적으로 실행하고자 할 때 사용하는 문법

  • 파이썬에서는 while 문과 for문이 있는데, 어떤 것을 사용해도 무방하다.

    • 다만, 코딩 테스트에서의 실제 사용 예시를 확인해 보면, for문이 더 간결한 경우가 많다

1. while 문

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

2. 반복문에서의 무한 루프

  • 끊임 없이 반복되는 반복 구문을 의미

  • 코딩 테스트에서 무한 루프를 구현할 일은 거의 없으니 유의 해야 한다

  • 반복문을 작성한 뒤에는 항상 반복문을 탈출할 수 있는지 확인할 것.

3. for 문

  • 반복문으로 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

4. 파이썬의 continue 키워드

  • 반복문에서 남은 코드의 실행을 건너뛰고, 다음 반복을 진행하고자 할 때 continue를 사용한다
  • 1부터 9까지의 홀수의 합을 구할 때 아래와 같이 작성할 수 있다.
result = 0
for i in range(1,10):
    if i % 2 == 0:
        continue
    result += i
print(result)

25

5. 파이썬의 break 키워드

  • 반복문을 즉시 탈출하고자 할 때 break를 사용한다
  • 1부터 5까지의 정수를 차례대로 출력하고자 할 때 다음과 같이 작성할 수 있다.
i = 1
while True:
    print("현재 i 의 값:", i)
    if i == 5:
        break
    i += 1
    
현재 i 의 값: 1
현재 i 의 값: 2
현재 i 의 값: 3
현재 i 의 값: 4
현재 i 의 값: 5
  • 학생들의 합격 여부 판단 예제 1) : 점수가 80점만 넘으면 합격
scores = [90,85,77,65,44]
for i in range(5):
    if scores[i] >= 80:
        print(i+ 1,'번 학생은 합격')
        
1 번 학생은 합격
2 번 학생은 합격
  • 학생들의 합격 여부 판단 예제 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

profile
무럭무럭 자라볼까

0개의 댓글