알고리즘 8

18352. 특정 거리의 도시 찾기 - 파이썬. BFS, 큐

1. 사용한 알고리즘 | 자료 구조 BFS 큐 2. 풀이 접근 방식 전형적인 BFS 문제입니다. K회 만큼 BFS 연산 후 Queue 에 있는 값을 정렬, 출력합니다. 3. 특이사항 Stack 2개를 스왑하는 방식으로 사용하여 deque 를 import 하지 않고 BFS 알고리즘을 구현할 수 있습니다. 4. 언어 | 실행시간 | 메모리 사용량 Python3 | 1264ms | 97164kb from sys import stdin def solution(): # 1. 입력 # N: 정점의 수 | M: 간선의 수 # K: BFS 연산 횟수 | X: BFS 연산 시작점 N, M, K, X = map(int, stdin.readline().split()) # 2. 선언 # 2-1. paths: 간선 정보 pat..

23253. 자료구조는 정말 최고야 - AdHoc, 스택, 정렬. 파이썬

사용한 알고리즘 / 자료구조 스택 정렬 힙 정렬 접근한 방법 정렬을 이용한 접근법 '책 더미'(스택)의 정보를 M회 입력 받는다. '책 더미'를 입력받을 때마다 각 책 더미가 내림차순으로 정렬되어있는지 확인한다. 만약 단 하나의 '책 더미'라도 내림차순 정렬되어있지 않다면, 문제에서 요구하는 정렬 연산은 불가능하다. 'is_order_possible'이라는 변수에 '정렬이 불가능하다'는 정보를 기입한다. 반복문을 종료한다. '정렬' 가능 여부를 파악한다. 조건에 맞게 콘솔에 출력한다. 힙 정렬을 이용한 접근법 '책 더미'(스택)의 정보를 M회 입력 받는다. '책 더미'를 입력받을 때마다 각 책 더미의 가장 오른쪽 원소를 pop한다. 2번에서 pop된 원소를 '책 더미'의 index값과 함께 heap 에 ..

BOJ/스택 2022.01.15

9935. 문자열 폭발 - 스택. 파이썬

9935. 문자열 폭발 사용한 알고리즘 / 자료구조 1. 스택 접근한 방법 1) 입력받은 문자열을 스택에 삽입한다. 2) 폭발 문자열이 생성되었는지 비교한다. 3) 폭발 문자열이 생성되었을 경우 스택에서 폭발 문자열의 길이만큼 문자들을 뺀다. 어려웠던 점 마지막 폭파 처리를 리스트의 슬라이싱으로 처리했다가 시간초과. 느낀 점 시간 복잡도에 항상 유의해야 한다. 같은 결과값을 내는 연산이라면 가장 빠른 방법을 선택해야 한다. 풀었을 때의 백준 티어 2021-10-09. 골드 2. import sys # 1. 입력 # 둘 다 상수이므로 대문자로 표기한다. INPUT_STRING = list(sys.stdin.readline().rstrip()) # 초기 문자열 BOMB = list(sys.stdin.read..

BOJ/스택 2021.10.13

1744. 수 묶기 - 그리디. 정렬. 파이썬.

1744. 수 묶기 사용한 알고리즘/자료구조 1. 그리디 2. 정렬 접근 방식 입력받은 숫자들을 아래의 4종으로 구분해 정리한다. 1) 0 2) 1 3) 1이 아닌 양의 정수 4) 음의 정수 각각의 활용법은 다음과 같다. 1) 0 음의 정수에 곱해줘서 0으로 만든다. 단 음수가 2개 이상일 경우 음수끼리 서로 짝지어서 합에 더하는게 이득이다. 음수의 갯수가 홀수일 때, 가장 절댓값이 작은 1개의 음수에만 0을 곱해 소거하면 된다. 따라서 0은 True/False 로 존재 여부만 확인한다. 2) 1 갯수만큼 total 에 더한다. 3) 1이 아닌 양의 정수 큰 것 부터 2개씩 짝지어서 곱한 후 total 에 더한다. 4) 음의 정수 절댓값이 큰 것부터 2개씩 짝지어서 곱한 후 total 에 더한다. 문제 ..

BOJ/그리디 2021.10.09

1759. 암호 만들기 - 파이썬. 백트래킹, DFS

1759. 암호 만들기 사용한 알고리즘 및 자료구조 DFS(백트래킹) 집합 접근 방식 문제의 조건은 아래와 같다. 중복되지 않는 알파벳들을 네 개 선택해서 나열해야 한다. 암호는 오름차순으로 정렬되어야 하며 자음이 2개, 모음이 1개 이상이여야 한다. 아래의 로직대로 풀었다. 입력 / 선언 input을 받는다. 길이가 127인 아스키-리스트를 만든다. input값에 등장한 알파벳들을 아스키값으로 변환, askii 리스트의 해당 인덱스에 '값이 있음' 표시 해준다. 연산 DFS 연산한다. index가 97일 때부터 연산한다 (ord('a') == 97) 연산 종료 조건 길이가 L일 때. 정답 조건 모음이 1개 이상, 자음이 2개 이상 DFS연산 모든 아스키값을 순회하면서 특정 아스키 값이 '있을 떄' 사용..

카테고리 없음 2021.09.24

1260. DFS와 BFS - 파이썬

1260. DFS와 BFS 사용한 알고리즘 및 자료구조 1. BFS, 스택 2. DFS, 큐 3. 연결 리스트 접근 방식 1. BFS와 DFS 를 구현한다. 문제 특이사항 1. 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문해야 한다. 스택: 후입선출 큐: 선입선출 의 특징을 염두에 두고 구현해야 한다. 2. DFS 특정 지점의 연결 리스트를 조회할 때 연결 리스트를 1) 오름차순 정렬 후 2) pop()으로 스택에 삽입하면 3) 정점 번호가 큰 순서대로 스택에 삽입된다. ==> 정점 번호가 작은 순서대로 조회할 수 있다! 3. BFS 특정 지점의 연결 리스트를 조회할 때 연결 리스트를 1) 내림차순 정렬 후 2) pop() 으로 큐에 삽입하면 3) 정점 번호가 작은 순서대로..

3019. 뱀

사용한 자료구조 / 알고리즘 덱(deque) 접근 방법 고전 게임 '스네이크'를 직접 구현하는 알고리즘 문제다. 구현해야 하는 요소는 다음과 같다 사과를 먹을 때마다 뱀의 길이가 증가. 뱀이 자신을 물거나 벽에 닿으면 종료. 뱀이 성공적으로 이동할 경우, 뱀 꼬리를 옮겨줌. 시간에 따른 이동방향 변경 구현한 방법 뱀의 길이: 1로 시작해서 사과를 만날 때마다 증가하는 int 변수. 뱀의 좌표: deque로 관리. len(deque)가 뱀의 길이보다 클 경우, popleft 후 지도에서 뱀을 지워야 한다. (가장 먼저 들어갔던 곳 == 발자취 == 꼬리) 시간 값을 key로 하는 dictionary 를 선언. 매 초마다 value가 있는지 확인한다. 느낀점, 특이사항 문제를 꼼꼼하게 읽어야 한다. '뱀의 ..

BOJ/구현 2021.09.15

9019. DSLR (BFS)

사용한 알고리즘 BFS 접근했던 법 시작점에서 끝 점까지 가는 방법을 출력해야 한다. `True` 와 `False` 로 방문 여부만을 판단하는 일반적인 `visited`리스트를 사용하는 대신 visited = [''] * 10000 를 선언. vstd에 '루트'들을 입력하며 방문처리와 루트 보관을 동시에 한다. vstd[st] 에 아무 값(',')을 채워넣고 BFS 연산 시작. vstd[ed] 가 None이 아닐 때 == 한 번이라도 닿았을 때 vstd[ed]를 출력하고 BFS 종료. 단, vstd[st]에서 임의의 값을 넣고 시작했으므로 적당한 슬라이싱이 필요. 어려웠던 점 '시작점에 방문 처리 안 해도 적당히 잘 풀리겠지' 하다가 틀렸다. 슬라이싱으로 오답을 받았다. D, S, L, R을 최소한의 연..

1