728x90

Programming 46

[Algorithm] DFS/BFS

그래프 표현 방법 - 인접 행렬(Adjacency Matrix) : 2차원 배열에 각 노드가 연결된 형태를 기록하는 방식 0 1 2 0 0 7 5 1 7 0 INF 2 5 INF 0 INF = 999999999 # 무한의 비용 선언 # 2차원 리스트를 이용해 인접 행렬 표현 graph = [[0, 7, 5], [7, 0, INF], [5, INF, 0]] - 인접 리스트(Adjacency List) : 모든 노드에 연결된 노드에 대한 정보를 차례대로 연결하여 저장(연결리스트 이용) # 행(Row)이 3개인 2차원 리스트로 인접 리스트 표현 graph = [[] for _ in range(3)] # 노드 0에 연결된 노드 정보 저장(노드, 거리) graph[0].append((1, 7)) graph[0]...

[Python] 코딩테스트에서 자주 사용되는 주요 라이브러리

코딩테스트를 준비하며 반드시 알아야 하는 라이브러리 6가지! 1. 내장 함수: 기본 내장 라이브러리 2. itertools: 순열과 조합 3. heapq: 힙(Heap) 기능 제공, 우선순위 큐 기능 구현 4. bisect: 이진 탐색(Binary Search) 기능 제공 5. collections: 덱(deque), 카운터(Counter) 등의 유용한 자료구조 포함 6. math: 필수적인 수학적 기능 제공(팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수들과 파이같은 상수 포함) 1. 내장 함수 - sum() : iterable 객체(리스트, 사전 자료형, 튜플 자료형 등)의 모든 원소의 합 반환 result = sum([1, 2, 3, 4, 5]) print(result) # >>> 15..

Programming/Python 2021.08.12

[Python] 2차원 리스트 초기화하기

요소의 개수를 미리 알고있는 1차원 리스트를 선언할 때는 다음과 같이 선언한다. # 5개 요소의 1차원 리스트 만들기 n = 5 a = [0]*n print(a) # >>> [0, 0, 0, 0, 0] 하지만 2차원 리스트를 선언할 때 같은 방법을 사용하면 오류가 난다. # 5*5 요소의 2차원 리스트 만들기(잘못된 방법) n = 5 a = [[0] * n] * n print(a) # >>> [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] 출력은 잘 되는 듯 보이지만, a[1][2]를 1로 바꾸려고 한다면, 리스트가 이상하게 바뀌어버린다. a[1][2] = 1 print(a) # >>> [[0, 0,..

Programming/Python 2021.08.11

[백준/Python] 해시 - 임진왜란(3077)

임진왜란 문제 설명 현우는 방금 선생님으로부터 역사 시험 결과를 받았다. 현우가 가장 열심히 공부한 문제는 임진왜란의 해전을 일어난 순서대로 적는 문제이다. 올바른 순서는 다음과 같다. 1. 옥포 해전 2. 사천 해전 3. 한산도 대첩 4. 명량 해전 5. 노량 해전 현우는 정말 열심히 공부했고, 옥포 해전을 제외한 모든 해전의 날짜를 외웠다. 따라서, 현우는 옥포 해전이 가장 먼저 일어난 해전인지 마지막에 일어난 해전인지 생각해내지 못했고, 다음과 같이 결국 제일 마지막에 적고말았다. 1. 사천 해전 2. 한산도 대첩 3. 명량 해전 4. 노량 해전 5. 옥포 해전 현우가 적은 정답은 모든 위치에서 정답과 일치하지 않는다. 따라서 5개 해전 중에 4개 해전의 순서를 올바르게 적었지만, 점수는 5점 만점..

[백준/Python] 해시 - I AM IRONMAN(17264)

I AM IRONMAN 문제 설명 다들 문제 제목을 보고 요즘 가장 핫한 영화를 생각했겠지만 이 이야기는 LUL(League Us Legends) 게임에서 아이언(Iron) 티어에 있는 형동이의 슬픈 이야기이다. LUL에서 티어는 게임 실력을 판가름할 수 있는 지표이다. 그중 아이언 티어는 가장 낮은 단계에 위치해 있다. 친구인 강엽이와 건홍이에게 “Ironman”이라며 게임을 못한다고 놀림당하던 형동이는 꼭 아이언 티어에서 벗어나겠다고 결심했다. 하지만 형동이는 자신의 실력으로 절대 아이언(Iron) 티어에서 벗어나지 못하는 것을 알고 있다. LUL은 두 명의 플레이어가 같이 팀이 되어 하는 게임이기 때문에 자신이 못해도 게임에서 이길 수 있고 자신이 잘해도 게임은 질 수 있다. 형동이는 게임은 못하지..

[Python] itertools 사용하기 (permutaions, product, combinations)

itertools: 경우의 수를 찾을 때 사용되는 라이브러리 (import itertools) itertools.permutations: 순서는 중요하고 중복은 허용되지 않음. ex) itertools.permutations([1, 2, 3], 2) => [(1,2), (1,3), (2,1), (2,3), (3,1), (3,2)] itertools.product: 순서는 중요하고 중복은 허용됨. ex) itertools.product([1, 2, 3], 2) => [(1,1), (1,2), (1,3), (2,1), (2,2), (2,3), (3,1), (3,2), (3,3)] itertools.combinations: 순서는 중요하지 않고 중복은 허용되지 않음. ex) itertools.combinati..

Programming/Python 2021.08.09

[Algorithm] 다이나믹 프로그래밍

다이나믹 프로그래밍은 다음 조건을 만족할 때 사용할 수 있다. 큰 문제를 작은 문제로 나눌 수 있다. 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다 탑다운(Top-Down) 방식 : 재귀함수를 이용하여 다이나믹 프로그래밍 소스코드를 작성하는 방법, 큰 문제를 해결하기 위해 작은 문제를 호출 메모이제이션(Memoization) : 다이나믹 프로그래밍을 구현하는 방법 중 한 종류로, 한 번 구한 결과를 메모리 공간에 메모해두고 같은 식을 다시 호출하면 메모리 결과를 그대로 가져오는 기법 보텀업(Bottom-Up) 방식 : 반복문을 이용하여 소스코드를 작성하는 방법, 작은 문제부터 차근차근 답을 도출 (탑다운 방식보다 보텀업 방식이 권장됨) ## 예시 (피보나치 수열 소스코드(재귀적)) -..

[백준/Python] 해시 - 나는야 포켓몬 마스터 이다솜(1620)

나는야 포켓몬 마스터 이다솜 문제 설명 안녕? 내 이름은 이다솜. 나의 꿈은 포켓몬 마스터야. 일단 포켓몬 마스터가 되기 위해선 포켓몬을 한 마리 잡아야겠지? 근처 숲으로 가야겠어. (뚜벅 뚜벅) 얏! 꼬렛이다. 꼬렛? 귀여운데, 나의 첫 포켓몬으로 딱 어울린데? 내가 잡고 말겠어. 가라! 몬스터볼~ (펑!) 헐랭... 왜 안 잡히지?ㅜㅜ 몬스터 볼만 던지면 되는 게 아닌가...ㅜㅠ (터벅터벅) 어? 누구지? 오박사 : 나는 태초마을의 포켓몬 박사 오민식 박사라네. 다솜아, 포켓몬을 잡을 때는, 일단 상대 포켓몬의 체력을 적당히 바닥으로 만들어놓고 몬스터 볼을 던져야 한단다. 자, 내 포켓몬 이상해꽃으로 한번 잡아보렴. 포켓몬의 기술을 쓰는 것을 보고 포켓몬을 줄지 안줄지 결정을 하겠네. 자 한번 해보아..

[프로그래머스/Python] 해시 - 전화번호 목록

전화번호 목록 문제 설명 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다. 입..

728x90