알고리즘
-
[프로그래머스] LV1. 카드 뭉치알고리즘 2023. 3. 9. 13:17
문제 https://school.programmers.co.kr/learn/courses/30/lessons/159994 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 1. 처음에는 card1, card2에 대한 조합 중에 goal과 같은게 있으면, Yes 없으면 No 를 return 하려고 했는데, 2가지 배열에 대한 조합 구하는 방법을 모르겠어서 PASS 2. 두번째로 생각한 방법은 for i in goal 이렇게 for문을 돌려서 i == cards1[0] 혹은 i == cards2[0] 일때마다 i == cards1 이면 cards1 = ca..
-
[프로그래머스] Lv1. 바탕화면 정리알고리즘 2023. 3. 8. 13:51
문제 https://school.programmers.co.kr/learn/courses/30/lessons/161990 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 그림으로 그려보면 결국 알수있는 점은 x1 = 가장 위쪽 , y1 = 가장 왼쪽 x2 = 가장 아래쪽 , y1 = 가장 오른쪽 을 표현하면 된다! 이다. 표현하기 위해서 x1,x2,y1,y2를 각각 초기화 해주고 ( 초기화는 범위를 잘 체크해주면 된다 ) , '#' 이 나올때마다 그 위치의 값을 적용시켜주면 된다. 참고로, elif i > x2 같은 코드를 적으면 #이 한개있을때를 만..
-
[백준] 20040 사이클 게임알고리즘 2023. 2. 17. 19:43
문제 https://www.acmicpc.net/problem/20040 20040번: 사이클 게임 사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한 www.acmicpc.net 풀이 - 문제에서 ' 사이클을 완성하는 순간 게임이 종료 ' 라는 말을 보고 우리가 기본적으로 아는 서로소 집합 ( union-find ) 이라고 생각했다 - ' m 번의 차례를 모두 처리한 이후에도 종료되지 않았다면 0을 출력한다. ' 을 볼 수 있는데, 이는 m번을 다돌았는데 다같이 find가 다를수있다는 말이다 - 이미 정답이 나왔으면 더이상 실행할 필요가 없다. ( 하지만 나는 ..
-
[알고리즘] 백준 - 극장좌석알고리즘 2023. 2. 15. 22:06
문제 풀이 - 이 문제는 고정석을 기준으로 풀어야 한다 - 시작점 - 고정석 - 고정석 - 끝점 : 사이의 3칸을 기준으로 사이사이에 몇칸이 있는지 확인하고 새로운 배열에 넣어둔다 - 새롭게 넣어둔 배열의 원소 값들로 피보나치 수열 이랑 같은 점화식으로 결과값 이끌어 내면서 값들을 곱하면 된다 코드 # 실버 1 - 2302 import sys input = sys.stdin.readline n = int(input()) m = int(input()) if n >= 2: d = [i for i in range(1, n+1)] for i in range(m): data = int(input()) d[data-1] = 0 res = [] cnt = 0 for i in range(n): if d[i] != 0:..
-
[프로그래머스] 섬 연결하기알고리즘 2023. 2. 15. 20:07
문제 섬을 연결하는데 cost가 있고, 최소비용을 구해야한다 -> 전형적인 크루스칼 문제이다 풀이 1. 먼저 " n개의 섬을 최소의 비용으로 서로 통행할 수 있게 만든다 " 에서 크루스칼 문제임을 알 수 있었다 2. costs 에 주어지는 값들은 [[x1,y1,cost], [x2,y2,cost] , ... , [xn,yn,cost]] 이렇게 생각하면 쉽다. 3. cost 기준으로 edges를 정렬한후 같은 집합에 속하지 않는 값들의 합을 구해서 반환하면 된다. 코드 # 크루스칼 def solution(n, costs): parent = [i for i in range(n+1)] def find(x): if x != parent[x]: parent[x] = find(parent[x]) return pare..
-
[알고리즘] 백준 - 신나는 함수 실행 ( 9184 )알고리즘 2023. 2. 3. 15:26
1. 문제 2. 접근 1. 문제에서 함수를 구현하는 것은 쉬운데, 시간이 오래걸린다는 점에서 DP를 사용하면 된다는 점은 알수있다 2. 풀이를 보면 d를 3차원으로 초기화한다는 점을 알 수 있다. 특이한 점은 21번을 반복한다는 점이다. 이유는 조건에서 20을 초과하면 w(20,20,20)으로 재귀를 하기 때문이다. 3. 조건은 그대로 쓰면 되는데 시간을 좀 더 빠르게 나오게 하기 위해서 중간에 구현된 d[a][b][c] 가 있다면 바로 return하는 것을 볼 수 있다. 또한, 앞의 조건 2개는 바로 return 하는 반면 아래 2개 조건은 d[a][b][c]의 값으로 실행된다는것을 알아야 한다 4. 출력은 format 메소드 쓰면 된다! 3. 풀이 # 실버 2 - 9184 import sys inpu..
-
[알고리즘] 백준 - 2293. 동전1알고리즘 2023. 2. 1. 15:26
1. 문제 2. 접근 - 이 문제는 이코테의 효율적인 화폐 구성과 유사하다. N가지의 화폐로 K원을 만족시키는 경우의 수를 구하는 DP 문제임을 알 수 있다 - 각 숫자를 (1,2,5)를 더해서 숫자를 나타내는 방법을 표로 경우의 수를 확인할 수 있다. 3. 풀이 # 골드5 - 2293 import sys input = sys.stdin.readline n, k = map(int, input().split()) coin = [] for i in range(n): coin.append(int(input())) d = [0] * (k+1) d[0] = 1 for i in coin: for j in range(1, k+1): if j - i >= 0: d[j] += d[j-i] print(d[k])
-
[알고리즘] 백준 - 1613 - 역사알고리즘 2022. 12. 1. 17:04
1. 문제 2. 접근 1. n 의 범위가 500이 안되기에 플로이드가 가능함을 알 수 있다. 2. 일반적인 플로이드 - 워셜의 알고리즘으로 풀면 되는데, 체크 할점은 전후 사정이기에 a->b 이냐 b->a 이냐 아니면 모르냐 의 출력 과정만 조심하면 될거 같다 3. 풀이 import sys input = sys.stdin.readline n, k = map(int, input().split()) INF = int(1e9) graph = [[INF] * (n+1) for _ in range(n+1)] for i in range(k): a, b = map(int, input().split()) graph[a][b] = 1 for k in range(1, n+1): graph[k][k] = 0 for k in..