PCCP 대비 내용정리

2023. 8. 1. 14:33· python
목차
  1. LIST
  2. 파이썬 기본 문법
  3.  
  4.  
  5. 알고리즘

LIST


 

[PCCE 정리 - 파이썬 기본] https://beyond-limits.tistory.com/43

파이썬 기본 문법


[딕셔너리] - https://wikidocs.net/16#_3

[값의 할당]

# 1. 1개 변수에 값 할당
a = 10
b = "string"
c = True
d = {}
print(a, b, c, d)

# 2. 2개 이상의 변수에 값 할당도 가능함.
a, b, c, d = 10, "string", True, {}
print(a, b, c, d)

 

 

[리스트]


 

[리스트  -  리스트 내에 요소를 조회]

리스트는 포함 여부를 in 키워드로 확인한다. [find 메서드 지원안함]

    for  i in gems:   # 리스트에 없으면 추가 , 없으면 조회
        if  i not in kindOfGems:
            kindOfGems.append(i)
        else:
            continue

https://zetawiki.com/wiki/Python_%EB%A6%AC%EC%8A%A4%ED%8A%B8_%EC%9A%94%EC%86%8C_%ED%8F%AC%ED%95%A8%EC%97%AC%EB%B6%80_%ED%99%95%EC%9D%B8_in

 

Python 리스트 요소 포함여부 확인 in - 제타위키

다음 문자열 포함...

zetawiki.com

# 진열된 모든 종류의 보석을 적어도 1개 이상 포함하는 가장 짧은 구간

def solution(gems):
    answer = []
    kindOfGems =[]
    # 1. 보석 종류 총 몇개인지
    for  i in gems:   # 리스트에 없으면 추가 , 없으면 조회
        if  i not in kindOfGems:
            kindOfGems.append(i)
        else:
            continue
        print(kindOfGems)
        
    # 2. 보석이 중복없이 나열+ 보석순서상관없음
    return answer


# 1. 가장 짧은 구간의 시작 진열대 번호와 끝 진열대 번호를 차례대로 배열에 담아서 return
# 2. 가장 짧은 구간이 여러 개라면 시작 진열대 번호가 가장 작은 구간을 return 

# gems	result
# ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"]	[3, 7]
# ["AA", "AB", "AC", "AA", "AC"]	[1, 3]
# ["XYZ", "XYZ", "XYZ"]	[1, 1]
# ["ZZZ", "YYY", "NNNN", "YYY", "BBB"]	[1, 5]

 

 

[리스트 - enumerate() 조건에 맞는 요소와 인덱스를 한번에 ]

파이썬 리스트를 순회하다가 조건에 맞는 요소를 찾으면 해당 요소의 인덱스를 알고 싶다면 enumerate() 함수를 사용하면 됩니다. enumerate() 함수는 리스트의 요소와 인덱스를 함께 반환해주는 유용한 내장 함수입니다.

my_list = [10, 20, 30, 40, 50]
# 이제 이 리스트를 순회하면서 특정 조건을 만족하는 요소의 인덱스를 찾아보겠습니다. 예를 들어, 30 이상인 첫 번째 요소의 인덱스를 찾고 싶다면 다음과 같이 할 수 있습니다:

target_value = 30

for index, value in enumerate(my_list):
    if value >= target_value:
        print("조건에 맞는 요소의 인덱스:", index)
        break

 

[리스트 - for문에서 in 연산자 뒤에 리스트와 enumerate 함수의 차이 ]

# 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지
def solution(routes):
    answer = 0
    # for index ,value in enumerate(routes):   리스트를 순회하며 인덱스와 인덱스 값을 반환
        # print(f"index: {index} , value:{value}")
    # for i in routes:    # 리스트를 순회하며 리스트 요소를 반환
    #     print(f"i:{i}")
    return answer


# routes	                                return
# [[-20,-15], [-14,-5], [-18,-13], [-5,-3]]	2

 

[리스트  - 정렬]
`sorted()` 함수나 리스트의 `sort()` 메서드를 사용

각 요소의 첫 번째 인덱스 값을 기준으로 오름차순으로 정렬

1. `sorted()` 함수 사용하기:

original_list = [[30, 10], [80, 20], [50, 40]]
sorted_list = sorted(original_list, key=lambda x: x[0])
print(sorted_list)

1.1 `sorted()` 함수 사용하기  , 다중 정렬

리스트를 각 요소의 첫 번째 인덱스 값을 내림차순으로 정렬하고, 첫 번째 인덱스 값이 같은 요소들에 대해서는 두 번째 인덱스를 내림차순으로 정렬

`key` 매개변수에 튜플을 사용하되, 각 요소의 첫 번째 인덱스는 음수로 바꾸어주면 됩니다.

original_list = [[80, 10], [30, 10], [50, 40], [80, 20]]
sorted_list = sorted(original_list, key=lambda x: (-x[0], -x[1]))
print(sorted_list)



2. `sort()` 메서드 사용하기:

original_list = [[30, 10], [80, 20], [50, 40]]
original_list.sort(key=lambda x: x[0])
print(original_list)

 

 

알고리즘


[알고리즘]

 - 다양한 문제를 해결하는데 사용되는 기법들의 집합


1. 탐색 (Search Algorithms):
   - 선형 탐색 (Linear Search): 순차적으로 모든 요소를 탐색하여 특정 값을 찾는 방법.
   - 이진 탐색 (Binary Search): 정렬된 배열에서 중간 값을 기준으로 탐색 범위를 반으로 줄여가며 탐색하는 방법.

2. 정렬 (Sorting Algorithms):
   - 버블 정렬 (Bubble Sort): 인접한 두 요소를 비교하며 크기 순서대로 정렬하는 방법.
   - 선택 정렬 (Selection Sort): 최솟값을 선택하여 앞으로 옮겨 정렬하는 방법.
   - 삽입 정렬 (Insertion Sort): 정렬되지 않은 부분을 정렬된 부분에 삽입하여 정렬하는 방법.
   - 퀵 정렬 (Quick Sort): 피벗을 기준으로 배열을 분할하여 정렬하는 방법.
   - 병합 정렬 (Merge Sort): 배열을 반으로 분할하여 정렬하고, 정렬된 부분을 병합하는 방법.

3. 그래프 탐색 (Graph Algorithms):
   - 깊이 우선 탐색 (Depth-First Search, DFS): 그래프의 깊은 부분을 우선 탐색하는 방법.
   - 너비 우선 탐색 (Breadth-First Search, BFS): 그래프의 인접한 노드를 우선 탐색하는 방법.

   - [ [알고리즘] - DFS 와 BFS ] https://beyond-limits.tistory.com/48


4. 동적 계획법 (Dynamic Programming):
   - 큰 문제를 작은 부분 문제로 나누어 풀고, 작은 부분 문제들의 해를 저장해두고 재활용하여 효율적으로 문제를 해결하는 방법.

5. 그리디 알고리즘 (Greedy Algorithm):
   - 각 단계에서 최적의 선택을 하여 최종 결과를 찾는 알고리즘. 현재 단계에서의 선택이 지역적으로 최적이라면 그 선택을 계속 수행하는 방법.

6. 분할 정복 (Divide and Conquer):
   - 큰 문제를 작은 부분 문제로 나눈 후, 각 부분 문제를 독립적으로 해결하고 이를 결합하여 전체 문제를 해결하는 방법.

7. 백트래킹 (Backtracking):
   - 가능한 모든 후보 해를 탐색하면서 해를 찾는 방법. 해를 찾기 위해 탐색하다가 조건에 맞지 않으면 이전 단계로 돌아가 다른 후보 해를 탐색합니다.

이 외에도 많은 알고리즘 기법들이 있으며, 각각의 기법은 특정 유형의 문제를 해결하는 데 특화되어 있습니다. 

 

 

 

[알고리즘] 슬라이딩 윈도우(Sliding window), 투 포인터(Two pointer)

https://velog.io/@nana-moon/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%94%A9-%EC%9C%88%EB%8F%84%EC%9A%B0Sliding-window-%ED%88%AC-%ED%8F%AC%EC%9D%B8%ED%84%B0Two-pointer

 

[알고리즘] 슬라이딩 윈도우(Sliding window), 투 포인터(Two pointer)

슬라이딩 윈도우는 일정한 길이의 범위를 이동하여 조건에 맞는 값을 찾는 알고리즘이다. 한 칸씩 이동 하기 때문에 공통된 부분은 유지하고 처음과 끝 원소만 갱신하여 유용하게 사용할 수 있

velog.io

 

[설명]

슬라이딩 윈도우(Sliding Window)는 알고리즘에서 특정 크기의 구간을 일정한 간격으로 이동시키며 문제를 해결하는 기법입니다. 주로 구간 내의 값들을 효율적으로 처리하기 위해 사용됩니다. 이 기법은 배열, 리스트, 문자열 등과 같은 시퀀스 데이터에서 유용하게 적용할 수 있습니다.

슬라이딩 윈도우는 다음과 같은 방식으로 동작합니다:

초기에 구간의 시작과 끝을 가리키는 두 개의 포인터를 설정합니다.
구간의 크기를 설정하고, 이 크기에 해당하는 구간을 처음부터 끝까지 이동시킵니다.
이동할 때마다 구간 내에서 필요한 처리를 수행합니다.
구간의 크기에 따라 적절한 조건을 설정하여 구간을 이동시킵니다.
구간을 이동하며 최적의 조건을 찾거나 원하는 결과를 도출합니다.
슬라이딩 윈도우를 사용하면 중복 연산을 줄이거나 연속된 구간의 합, 최대, 최소 등을 효율적으로 계산할 수 있습니다. 또한 슬라이딩 윈도우를 사용하여 구간 내의 값을 업데이트하거나 조작하는 작업을 빠르게 수행할 수 있습니다.

일반적으로 슬라이딩 윈도우는 문제의 특성에 따라 다양한 방법으로 구현할 수 있습니다. 구간의 크기와 이동 방식, 구간 내에서 수행해야 하는 처리 등을 잘 조합하여 원하는 결과를 얻을 수 있습니다.

예를 들어, 보석 문제에서 슬라이딩 윈도우를 사용하면 보석 종류가 다 나오는 구간을 탐색하거나, 구간 내의 보석 종류별 개수를 업데이트하여 최적의 구간을 찾는 등의 작업을 효율적으로 수행할 수 있습니다. 슬라이딩 윈도우는 문제를 해결하는 다양한 알고리즘에서 활용되므로, 알고리즘을 풀 때 유용한 기법 중 하나입니다.

 

 

 

 

 

 

 

[참고 사이트]


  1. [파이썬 위키] https://wikidocs.net/book/2070
  2. [위키독스 -  1번항목 추가] https://wikidocs.net/
  3. [자료구조 & 알고리즘 강의] https://www.youtube.com/@ChanSuShin
  4. [파이썬 기초 정리 블로그] https://pybasall.tistory.com/171
  5. [공식문서] https://docs.python.org/ko/3/tutorial/index.html
 

Python 계단밟기

## Python을 배워보자 > 문제를 풀다보면 문법은 자동으로 알게된다. > 문법을 배우는것이 프로그램을 배우는것이 아니라 어떻게 활용하는냐가 중요하다

wikidocs.net

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

Chan-Su Shin

한국외국어대학교 컴퓨터공학부 신찬수 교수의 강의용 채널로 전체 공개 콘텐츠입니다. (죽어가던 채널을 코로나가 강제로 부활시키는군요.) 주로 자료구조와 알고리즘에 대한 내용을 다루며,

www.youtube.com

 

파이썬 산술연산자 7가지 ( + , -, *, /, **, //, %)

파이썬 산술연산자 7가지 ( +, -, *, /, **, //, %) 파이썬 산술연산자는 아래와 같이 일곱가지가 있습니다 1. 덧셈 ( + ) 문자열도 덧셈가능. >>> 2+35 >>> "hi"+"hello"'hihello' 2. 뺄셈 ( - ) 문자열은 뺄셈 불가.

pybasall.tistory.com

 

The Python Tutorial

Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax an...

docs.python.org

 

저작자표시 (새창열림)
  1. LIST
  2. 파이썬 기본 문법
  3.  
  4.  
  5. 알고리즘
Break-Limits
Break-Limits
GitHub - https://github.com/kimYHgit
Innovate.Daily.LifeGitHub - https://github.com/kimYHgit
Break-Limits
Innovate.Daily.Life
Break-Limits
전체
오늘
어제
  • 분류 전체보기 (49)
    • Web_Development_Basics (9)
      • HTML (1)
      • JavaScript (2)
      • React (6)
      • Nodejs (0)
    • database (7)
    • python (3)
      • algorithm (1)
      • Data_Structure (1)
      • AI & DataScience (0)
    • IOT (6)
    • OT (1)
    • Devops (6)
    • freecodecamp (0)
      • Back End Development and AP.. (0)
    • 기타 (1)
    • WebGL (3)
    • 회고 (3)

인기 글

최근 글

블로그 메뉴

  • 방명록
  • 글쓰기
hELLO · Designed By 정상우.v4.2.1
Break-Limits
PCCP 대비 내용정리
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.