알고리즘 84

프로그래머스 - 달리기 경주(Javascript)풀이

https://school.programmers.co.kr/learn/courses/30/lessons/178871?language=javascript 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 얀에서는 매년 달리기 경주가 열ㄹ비니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 떄 추월한 선수의 이름을 부릅니다. 예를들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 떄, 해설진이 "soe" 선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, ..

알고리즘 2024.05.08

LeetCode - Same Tree Javascript

Same Tree 의 경우 두 이진트리가 같은지 확인하는 문제이다. 두 이진트리가 같다는것은 두 트리의 구조가 동일하며, 노드들의 값이 모두 같아야 한다는 것을 의미하는 것이다. 재귀적으로 두 트리를 동시에 탐색하는 방식으로 풀었다. 각 단게에서 현재 노드의 값이 같은지 확인하고 왼쪽 자식과 오른쪽 자식을 각각 재귀적으로 비교하면 정답이다. p = [1,2,3]; q = [1,2,3]; function TreeNode(val, left, right) { this.val = (val===undefined ? 0 : val) this.left = (left===undefined ? null : left) this.right = (right===undefined ? null : right) } 정답 var i..

알고리즘 2024.03.30

백준 No.17396 백도어 - JAVA

문제 유섭이는 무척이나 게으르다. 오늘도 할 일을 모두 미뤄둔 채 열심히 롤을 하던 유섭이는 오늘까지 문제를 내야 한다는 사실을 깨달았다. 그러나 게임은 시작되었고 지는 걸 모척이나 싫어하는 유섭이는 어쩔 수 없이 백도어를 해 게임을 최대한 빠르게 끝내기로 결심하였다. 최대한 빨리 게임을 끝내고 문제를 축제해야 하기 때문에 유섭이는 최대한 빨리 넥서스가 있는 곳으로 달려가려고 한다. 유섭이의 챔피언은 총 N개의 분기점에 위치할 수 있다. 0번째 분기점은 현재 유섭이의 챔피언이 있는 곳을, N-1번째 분기점은 상대편 넥서스를 의미하며 나머지 1,2..N-2번째 분기점은 중간 거점들이다. 그러나 유섭이의 챔피언이 모든 분기점을 지나칠 수 있는 것은 아니다. 백도어의 핵심은 안 들키고 살금살금 가는 것이기 때..

알고리즘 2023.05.07

백준 No.18243 Small World Network - JAVA

문제 작은 세상 네트워크(Small World Network)란 Milgram교수가 1967년에 처음으로 밝혀낸 이론이다. 간단히 설명하자면 전체 네트워크가 거대하더라도 전체가 서로 가깝게 연결될 수 있다는 이론이다. 해당 이론에서 Milgram교수는 지구에 있는 모든 사람들이 최대 6단계로 연결될 수 있다고 주장하였다. 예를 들어 이 문제를 김모씨(23)와 이지은님(27)이 서로 생판 모르는 관계라도 최대 6단계만 거치면 서로 연결이 도어있다는 것이다. 위의 그림에서 정점은 사람, 간선은 친구 관계라 할 떄 왼쪽 그래프의 모든 정점들은 서로 최소 6단계 이하로 연결되어 있으므로 작은 세상 네트워크를 만족한다. 그러나 오른쪽 그래프의 초록색 정점끼리는 최소 7단계를 거쳐서 연결되어 있으므로 작은 세상 네..

알고리즘 2023.05.06

백준 No.11403 경로 찾기 - JAVA

문제 가중치 없는 방향 그래프 G가 주어졌을 떄, 모든 정점 (i,j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오 3 0 1 0 0 0 1 1 0 0 풀이 - 인접행렬로 받아 인접행렬로 출력하고, 바로 플로이드 와샬이 떠오르긴 했는데 바로 적용하기가 어려웠다.. 0,0 부분만 0이 출력되는 결과가 나와버려서 해결 못해서 답을 찾아봤다. 결국 arr[2번쨰 for][1번째 for]==1 && arr[1번째 for][3번쨰 for] 가 통과하면 arr[2번쨰 for][3번쨰 for] 로 갈 수 있다는 뜻이므로 arr[2번쨰 for][3번쨰 for]에 1을 넣어주면 정답이다. import java.io.BufferedReader; import java.io.IOExcepti..

알고리즘 2023.05.05

백준 No.7576 토마토 - JAVA

문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들도 익을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 ..

알고리즘 2023.05.04

백준 No.11497 통나무건너뛰기 - JAVA

문제 남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이 차가 최소가 되게 하려 한다. 통나무 건너뛰기의 난이도는 인접한 두 통나무 간의 높이의 차의 최댓값으로 결정된다. 높이가 {2,,4,5,6,9}인 통나무들을 세우려 한다고 가정하자. 이를 [2, 9, 7, 4, 5]의 순서로 세웠다면 가장 첫 통나무와 가장 마지막 통나무 역시 인접해 있다. 즉, 높이가 2인 것과 높이가 5인 것도 서로 인접해 있다. 배열 2,9,7,4,5의 난이도는 7이다. 우리는 더 나은 배열 2,5,9,7,4 를 만들 수 있으며 이 배열의 난이도는 4이다 이 배열보다 난이도가 낮은 배열은 만들..

알고리즘 2023.05.03

백준 No.18310 안테나 - JAVA

일직선 상의 마을에 여러 채의 집이 위치해 있다. 이중에서 특정 위치의 집에 특별히 한 개의 안테나를 설치하기로 결정했다. 효율성을 위해 안테나로부터 모든 집까지의 거리의 총 합이 최소가 되도록 설치하려고 한다. 이 때 안테나는 집이 위치한 곳에만 설치할 수 있고, 논리적으로 동일한 위치에 여러 개의 집이 존재하는 것이 가능하다. 집들의 위치 값이 주어질 때 안테나를 설치할 위치를 선택하는 프로그램을 작성하시오 풀이 예시 입력을 봤을 때 결국 4개에 중간 값 중 하나일 경우 면 된다. 근데 계속 해보니 중간에 틀리는 결과가 나와 당황 했는데 간단히 생각해보니 주어진 수가 홀수 개이면 가운대 값이 되어야 정답이었다 예를 들어 1,5,6,7,8 이면 답이 6이어야 한다. (4+1+2+4)와 (5+1+1+3)..

알고리즘 2023.05.02

백준 No.15903 카드 합체 놀이 - JAVA

문제 석환이는 아기다. 아기 석환이는 자연수가 쓰여져 있는 카드를 갖고 다양한 놀이를 하며 노는 것을 좋아한다. 오늘 아기 석환이는 무슨 놀이를 하고 있을까? 바로 카드 합체 놀이다! 아기 석환이는 자연수가 쓰여진 카드를 n장 갖고 있다. 처음에 i번 카드엔 ai가 쓰여있다. 카드 합체 놀이는 이 카드들을 합체하며 노는 놀이이다. 카드 합체는 다음과 같은 과정으로 이루어진다. 1. x번 카드와 y번 카드를 골라 그 두 장에 쓰여진 수를 더한 값을 계산한다. 2. 계산한 값을 x번 카드와 y번 카드 두 장 모두에 덮어쓴다. 이 카드 합체를 총 m번 하면 놀이가 끝난다. m번의 합체를 모두 끝낸 뒤, n장의 카드에 쓰여있는 모두 더한 값이 이 놀이의 점수가 된다. 이 점수를 가장 작게 만드는 것이 놀이의 목..

알고리즘 2023.04.26

백준 No.17390 - JAVA

문제 숭실골 높은 언덕 깊은 골짜기에 출제로고통 받는 욱제가 살고 있다! 욱제는 또 출제를 해야해서 단단히 화가났다. 그래서 욱제는 길이 N짜리 수열 A를 만들고, A를 비내림차순으로 정렬해서 수열 B를 만들어버렸다. 여기서 B를 출력하기만 하면 문제가 너무 쉬우니까 하나만 더 하자. 아래와 같은 질문 Q개가 주어진다. 욱제의 질문에 답하고 함께 엠티를 떠나자! 5 6 2 5 1 4 3 1 5 2 4 3 3 1 3 2 5 4 5 풀이 입력만 보고 바로 손으로 계산해보니 해당 구간에 대한 합을 구하는 것이길래 그대로 코드로 짰더니 12퍼에서 시간초과나서 틀렸다. 일단 시간초과코드 import java.io.BufferedReader; import java.io.IOException; import java...

알고리즘 2023.04.25