알고리즘 공부 20

[백준 11728번] 배열 합치기 python

(리스트 합치기)1. + 연산자를 이용한 방법입력A = [3, 5]B = [2, 9] 일때 출력으로 2. extend()를 사용하는 방법똑같이 입력했을 때 출력으로 [구현한 코드]N, M = map(int, input().split())li = []A = list(map(int, input().split()))# print(A)B = list(map(int, input().split()))# print(B)li = A + Bli.sort()print(*li) +- map()을 사용한 방법list1 = [[1, 10], [2, 22], [3, 19]]list2 = [[4, 2], [5, 9], [6, 3]]merged_list = [[1, 10, 4, 2], [2, 22, 5, 9], [3, 19, 6, ..

알고리즘 공부 2024.08.05

[백준 2167번] 2차원 배열의 합 python

1. N개의 줄에 M개의 정수로 배열이 주어진 것 해결N, M = map(int, input().split())li = []for _ in range(N) : p = list(map(int, input().split())) li.append(p)이렇게 설정해두면이차원 배열이 잘 생성된다.li2 = []K = int(input())for _ in range(K): sum = 0 i,j,x,y = list(map(int, input().split())) for t in range(i-1,x): for r in range(j-1, y): sum+=li[t][r] li2.append(sum)(i, j) 위치부터 (x, y) 위치까지(행, 열)에 저장된 ..

알고리즘 공부 2024.08.05

[백준 7785번] 회사에 있는 사람 python

dictionary를 사용해 key는 이름, value는 enter/leave로 나타냈다.people = {}for i in range(n): name, state = input().split() people[name] = state-> people = {'Baha': 'leave', 'Askar': 'enter', 'Artem': 'enter'} key 값이 동일한 경우 마지막 value 값으로 지정된다. [구현 코드]n = int(input())people = {}li = []for i in range(n):    name, state = input().split()    people[name] = state# print(people)    for name in people.keys() :..

알고리즘 공부 2024.08.01

[백준 2563번] 색종이 python

1. 처음 아이디어를 생각해내는 게 어려웠다.겹치는 부분들을 어떻게 계산해야 할 지 생각을 하고 있다가넓이가 1이고 한 변의 길이가 1인 정사각형으로 쪼개는 아이디어를 생각해냈다.이차원 배열로graph = [[0]*101 for _ in range(101)]그래프를 생성한 다음,정사각형이 놓인 부분의 사각형들을 쪼개서 모두 넓이를 1로 두고,정사각형이 두 개가 겹치든, 세 개가 겹치든 정사각형 안에 있는 부분이기 때문에 1에서 바뀌지 않게 지정해주었다.(처음에는 두 개가 겹치면 2로, 세 개가 겹치는 부분이면 3으로 바꾸려고 생각했었는데 굳이 그럴필요가 없다는 걸 깨달았다...)2. 처음에 아랫부분의 1의 개수를 구하는 코드를for k in range(1, 100): for l in range(1,..

알고리즘 공부 2024.08.01

[programmers] 타겟 넘버

- 문제 유형 : dfs/bfs 깊이/너비 우선 탐색- 생각 흐름dfs 사용 -> 덧셈만 끝까지 해놓고, 뺄셈을 하나씩 조합하며 모든 경우의 수 생각하기.bfs 사용 -> 덧셈, 뺄셈 둘 다 하면서 생각하기. 일단 bfs로 구현해보았다.**dfs로 구현해볼것[코드 구현]def solution(numbers, target): li = [0] for num in numbers: li2 = [] for i in li: li2.append(i+num) li2.append(i-num) li = li2 return li2.count(target)

알고리즘 공부 2024.07.24

[백준 2583번] 영역 구하기 python

- 문제 유형 : 그래프 탐색- 간단한 문제라는데 또 헤맸다.bfs, dfs를 어떤 부분에서 써야할지 감이 안왔다.dfs를 쓰기 위해 재귀의 깊이를 setrecursionlimt를 써서 정해주었다.구간의 칸 개수를 세기 위해 위, 아래, 왼쪽, 오른쪽을 체크할 수 있는 dx, dy를 만들었다.dfs에서 개수를 세서 구간별로 저장시키는 방법을 찾는 게 어려웠다..  [코드 구현]import syssys.setrecursionlimit(10000)M, N, K = map(int, input().split())graph = [[0] *  N for _ in range(M)]for _ in range(K):    x1, y1, x2, y2 = map(int, input().split())       for i ..

알고리즘 공부 2024.07.23

[백준 11403번] 경로 찾기 python

- 문제 유형 : 그래프 탐색, 플로이드 와샬- 소요 시간 : 약 2시간※ 플로이드 와샬 : '모든 정점'에서 '모든 정점'으로의 최단 경로(다익스트라 알고리즘 : 하나의 정점에서 출발했을 때 다른 모든 정점으로의 최단 경로를 구하는 알고리즘)핵심은 '거쳐가는 정점'을 기준으로 최단 거리를 구하는 것. https://blog.naver.com/ndb796/221234427842 참고 - 어려웠던 점 : bfs, dfs 문제이겠거니 생각하다가 '거쳐가는 정점'이 있을 때가 존재한다는 이유로, 어떻게 구현할지 고민함. [코드]N = int(input())graph = []for i in range(N): li = list(map(int, input().split())) graph.append(li..

알고리즘 공부 2024.07.23

[백준 7562번] 나이트의 이동 python

https://www.acmicpc.net/problem/7562   - 문제 유형 : 그래프 탐색- 소요 시간 : 약 3시간 -> 앞으로 줄여야 함.- 어려웠던 부분 : 이동 횟수를 구할 때 어떤 방식을 사용해야 하는지 감을 못 잡음.나이트가 첫번째 칸에서 두번째 칸으로 이동할 때 1증가, 두번째 칸에서 세번째 칸으로 이동할 때 1증가시키는 방식으로마지막 최종 칸에 써지는 숫자가 최소 이동 횟수가 됨. (여기서 이미 숫자가 채워진 그래프 칸은 이동 횟수를 변경시키지 않기 위해 graph[nx][ny]== 0인지 따져보는 것) [구현 코드]from collections import dequedef bfs(x, y):    q = deque()    q.append((x, y))        while q..

알고리즘 공부 2024.07.22

DFS, BFS 알고리즘 정리

- 유형 : 그래프 탐색- bfs, dfs 정리(기본은 기억해두기) 백준 DFS와 BFS 1260번 문제 참고# 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 VN, M, V = map(int, input().split()) # graph = [[0] * (N+1) for _ in range(N+1)]visited1 = [0] * (N+1)visited2 = [0] * (N+1)for _ in range(M): p, q = map(int,input().split()) graph[p][q] = graph[q][p] = 1def dfs(V): visited1[V] = 1 print(V, end=' ') ..

알고리즘 공부 2024.07.22