알고리즘
[백준 알고리즘] 2583번 영역 구하기, 파이썬(python)
[백준 알고리즘] 2583번 영역 구하기, 파이썬(python)
2021.08.242583, 영역 구하기 📁 문제 출처 💡 생각 예시에 있는 그래프를 위로 뒤집으면 좌측 상단이 (0, 0)인 그래프가 된다 그렇다면 입력을 받을 때 x1, y1, x2, y2 이렇게 받고 그래프에 그려줄 때는 2중 for문으로 (y1, y2) (x1, x2) 이렇게 받으면 예시와 같은 그래프를 그려줄 수 있다. 🛠 나의 코드 from collections import deque import sys input = sys.stdin.readline m, n, k = map(int, input().split()) dx = [0, 0, 1, -1] dy = [1, -1, 0 , 0] def bfs(graph, a, b): queue = deque() queue.append((a, b)) graph[a][b] =..
[백준 알고리즘] 7562번 나이트의 이동, 파이썬(python)
[백준 알고리즘] 7562번 나이트의 이동, 파이썬(python)
2021.08.247562, 나이트의 이동 📁 문제 출처 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 💡 생각 나이트가 현재 위치에서 원하는 위치까지 최소 몇 번 이동해야지 도착할 수 있는지를 구하는 문제이다. 현재 위치에서 목적지까지 어떻게 가는가? -> [2178, 미로 탐색] 문제처럼 라벨링을 해주면서 진행 🛠 나의 코드 from collections import deque import sys input = sys.stdin.readline dx = [-1, -2, -2, -1, 1, 2, 2, 1] dy = [2, 1..
[백준 알고리즘] 4963번 섬의 개수, 파이썬(python)
[백준 알고리즘] 4963번 섬의 개수, 파이썬(python)
2021.08.224963, 섬의 개수 📁 문제 출처 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 💡 생각 입력은 while문으로 계속 받기 대신 다른 bfs문제와 달리 대각선으로도 이동이 가능하기 때문에 기존 상하좌우에서 4가지 경로를 더 주었다. dx = [0, 0, 1, -1, 1, -1, 1, -1], dy = [1, -1, 0, 0, 1, -1, -1, 1] 🛠 나의 코드 from collections import deque import sys input = sys.stdin.readline dx = [0, ..
[백준 알고리즘] 11724번 연결 요소의 개수, 파이썬(python)
[백준 알고리즘] 11724번 연결 요소의 개수, 파이썬(python)
2021.08.2111724, 연결 요소의 개수 📁 문제 출처 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 💡 생각 방향이 없는 그래프는 graph[a].append(b), graph[b].append(a)로 양방향을 넣어주고 큐에 넣어주면서 모든 노드를 검사하면 된다. 쭉 연결이 되어 있다면 bfs함수 한 번에 끝나지만, 연결이 끊기면 다시 돌아와서 bfs 함수 실행하기 때문에 이때 answer를 카운트해주면 된다. 🛠 나의 코드 import sys input ..
[백준 알고리즘] 2178번 미로탐색, 파이썬(python)
[백준 알고리즘] 2178번 미로탐색, 파이썬(python)
2021.08.212178, 미로 탐색 📁 문제 출처 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 💡 생각 최소의 칸 수를 출력하기 위해서는 popleft를 한 뒤 4방향을 체크할 때 카운트 된 칸 수 +1로 라벨링 해주면서 끝까지 나아가면 최소 칸 수를 구할 수 있다. 🛠 나의 코드 from collections import deque n, m = map(int, input().split()) graph = [] for i in range(n): graph.append(list(map(int, input()))) dx = [0, 0, 1, -1] dy ..
[백준 알고리즘] 1926번 그림, 파이썬(python)
[백준 알고리즘] 1926번 그림, 파이썬(python)
2021.08.201926, 그림 📁 문제 출처 1926번: 그림 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로 www.acmicpc.net 💡 생각 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하는 문제 모든 부분을 탐색해야 되기 때문에 BFS로 풀이 이어져 있는 부분은 count 변수로 카운트해주고 paint 배열에 append 그림의 개수는 len(paint), 가장 넓은 그림은 max(paint) 🛠 나의 코드 from collections import deque n, m = map(int, input().split()) graph = [] for i..
[백준 알고리즘] 1966번 프린터 큐, 파이썬(python)
[백준 알고리즘] 1966번 프린터 큐, 파이썬(python)
2021.08.141966, 프린터 큐 📁 문제 출처 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 💡 생각 숫자가 높을수록 중요도가 높다. 처음에 출구가 오른쪽인 줄 알고 deque 사용하면서 이것저것 하느라 삽질했다... index가 m인 정수가 몇 번째에 출력되는지 기억해야 되니까 index랑 value를 같이 저장하는 temp(배열)을 만들어주고 시작했다. 그리고 arr배열의 reverse 해줘서 중요도 배열을 정렬해줬다. 🛠 나의 코드 t = int(input()) for i in range(t): n, m = map(..
[백준 알고리즘] 2941번 크로아티아 알파벳, 파이썬(python)
[백준 알고리즘] 2941번 크로아티아 알파벳, 파이썬(python)
2021.08.142941, 크로아티아 알파벳 📁 문제 출처 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 💡 생각 처음에는 replace를 공백으로 해줬다가 다시 앞뒤가 크로아티아 알파벳으로 조합되어서 또 삭제가 되는 일이 있었다. 아예 *로 치환해줘서 카운트해줬다. 🛠 나의 코드 arr = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] n = input() total = len(n) cnt = 0 for i in range(len(arr)):..
[백준 알고리즘] 4948번 베르트랑 공준, 파이썬(python)
[백준 알고리즘] 4948번 베르트랑 공준, 파이썬(python)
2021.08.144948, 베르트랑 공준 📁 문제 출처 4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 💡 생각 소수의 판별이니까 123,456 * 2 = 246912까지의 소수를 구해놓고 while문으로 소수 count 하기 🛠 나의 코드 n = 246912 arr = [True for i in range(n + 1)] for i in range(2, int(n // 2) + 1): if arr[i] == True: j = 2 while i * j
[백준 알고리즘] 4949번 균형잡힌 세상, 파이썬(python)
[백준 알고리즘] 4949번 균형잡힌 세상, 파이썬(python)
2021.08.114949, 균형잡힌 세상 📁 문제 출처 https://www.acmicpc.net/problem/4949 💡 생각 스택 사용 스택이 비어있을 때 ], )가 들어오면 no출력 후 break 그 이후는 문제 그대로 하나씩 적어 나가면서 코드 작성. 🛠 나의 코드 while True: data = input() if data == '.': break stk = [] for i in data: if i not in '[]()': continue elif len(stk) == 0: if i in '])': print('no') break stk.append(i) elif i == ']': if stk[-1] == '[': stk.pop() else: print('no') break elif i == ')': if..
[백준 알고리즘] 1021번 회전하는 큐, 파이썬(python)
[백준 알고리즘] 1021번 회전하는 큐, 파이썬(python)
2021.08.111021, 회전하는 큐 📁 문제 출처 https://www.acmicpc.net/problem/1021 💡 생각 queue.index(i)
[백준 알고리즘] 5430번 AC, 파이썬(python)
[백준 알고리즘] 5430번 AC, 파이썬(python)
2021.08.105430, AC 📁 문제 출처 https://www.acmicpc.net/problem/5430 💡 생각 일단 문제 그대로 하나씩 풀어나갔지만 시간 초과가 발생했다. 시간 초과 코드 t = int(input()) for i in range(t): p = input() n = int(input()) arr = list(map(int,input()[1:-1].replace(',', ''))) for i in p: if i == 'R': arr = arr[::-1] elif i == "D": if len(arr) == 0: break else: arr.pop(0) if arr == []: print('error') else: print(arr) deque 사용 - 시간 초과 from collections im..