알고리즘 15

[백준 7576 실버1] 토마토

www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 해결방안 BFS를 이용한 방식 사용 알고리즘 토마토 박스 초기화 전체를 돌며 익은 토마토를 큐에 넣어줌 bfs 큐에서 토마토를 꺼내와 상, 하, 좌, 우 토마토에 익은 날짜 + 1을 삽입해줌 전체를 돌며 가장 날짜가 큰 것을 찾음 0이 들어있다는 것은 토마토가 익을 수 없다는 것이므로 -1을 출력하고 종료 핵심 팁 기본적인 BFS문제 핵심 포인트는 익은 토마토에 단순히 방문 처리하는 것이 아니라..

알고리즘 2021.01.12

[프로그래머스 level3] 여행경로

https://programmers.co.kr/learn/courses/30/lessons/43164 코딩테스트 연습 - 여행경로 [[ICN, SFO], [ICN, ATL], [SFO, ATL], [ATL, ICN], [ATL,SFO]] [ICN, ATL, ICN, SFO, ATL, SFO] programmers.co.kr 해결방안 DFS를 이용한 방식 사용 재귀를 이용한 백트래킹 방식 사용 처음에는 BFS를 이용하려 했었으나, 이전에 풀었던 방식을 사용해서 풀 수 있다는 생각이 들어 DFS 사용 알고리즘 경로를 위한 딕셔너리, 방문 여부 파악을 위한 딕셔너리 생성 및 초기화 방문한 경우 1로 변경 초기화 한 것을 알파벳순으로 정렬해줌 dfs함수 생성 만약 값이 경로의 딕셔너리에 없다면 return으로 ..

알고리즘 2020.12.17

[프로그래머스 level3] 배달

[프로그래머스 level3] 배달 https://programmers.co.kr/learn/courses/30/lessons/12978 해결방안 다른 사람들의 해결방안을 보니 보통 bfs로 이용한 것 같음 다익스트라 역시 2차원 배열로 인접리스트를 이용한 것이라고 생각하면 됨 시작점에서 시작하여 모든 값을 확인하면 되니 다익스트라를 이용하면 될 것이라고 생각함 다익스트라 알고리즘에 대해서 모른다면 먼저 보고 오는것을 추천 알고리즘 순서 기본적으로 인접 리스트를 생성 각 노드까지의 거리를 저장하기 위해 노드의 갯수만큼 배열을 생성 하고 큰 수로 초기화 양방향이기 때문에 양쪽 인접리스트에 모두 거리와 노드를 삽입 시작점에서 출발하는 다익스트라 함수 실행 기본적으로 출발점의 거리는 0으로 셋팅 노드를 최소힙에..

알고리즘 2020.10.09

[프로그래머스 level2] 주식 가격

https://programmers.co.kr/learn/courses/30/lessons/42584 해결방안 for문 한개와 while문 한개 사용 (다른 사람들이 for문 2개를 쓴것과는 큰 차이가 없지만, Queue혹은 Stack을 이용해서 해결하고 싶었음) 다른 사람들 같은 경우는 for문 2개를 이용하거나, stack을 이용해서 해결한 것 같다. 15분에서 20분정도 고민 알고리즘 순서 일단 모든 원소를 Queue에 삽입 Queue에서 원소를 하나 뽑음 뽑은 애와 Queue의 원소 비교 다음 원소가 있다면 일단 count증가 무조건 처음에는 가격이 떨어지지 않음 뽑은 원소와 다음 원소의 값을 비교 뽑은 원소가 더 크거나 같다면 count 증가 뽑은 원소가 더 작을 경우 반복문 탈출 Queue의 ..

알고리즘 2020.09.23

백준_2609_최대공약수_최소공배수

최대공약수 & 최소공배수 구하는법 유클리드 호제법 이용 https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95#%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 최대 공약수입력으로 두 수 m,n(m>n)이 들어온다.n이 0이라면, m을 출력하고 알고리즘을 종료한다.m이 n으로 나누어 떨어지면, n을 출력하고 알고리즘을 종료한다.그렇지 않으면, m을 n으로 나눈 나머지를 새롭게 m에 대입하고, m과 n을 바꾸고 3번으로 돌아온다 출처: 위키백과 최소 공배수= 두 수의 곱(m * n) / 최대공약수 12345678910111213public static int gcd(int a,..

알고리즘 2019.02.17