목록분류 전체보기 (370)
GitHubSeob

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 최대 2명이란 점을 못 보고 풀다가 삽질했다.. lower_bound를 이용해서 풀어봤는데 효율성에서 시간초과가 나서 방법을 바꿨다. 투포인터 알고리즘을 사용해 풀었다. 오름차순이든 내림차순이든 상관은 없지만 오름차순으로 풀었다. 굳이 두 사람의 합을 limit에 가까이할 필요가 없다. 최대 2명이 탈 수 있고, 정렬을 했기 때문에 반례가 나올 수 없다. 가장 가벼운 사람과 가장 무..

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 현재 온 거리 x2 하는 점프는 건전지 사용량이 들지 않는다. 따라서 x2 하는 점프를 많이 해야 한다. 0부터 하게 되면 어느 순간에 해야 효율적인지 알 수 없으므로 거꾸로 해야 한다. n을 2로 계속 나누면서 홀수가 되면 -1을 하고 n이 0이 될 때까지 계속 반복한다. 예를 들어 n이 6이라 해보자. 6 -> 3, 3은 홀수 이므로 -1 2 -> 1, 1은 홀수이므로 -1 다시..

문제 https://www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net 문제풀이 다익스트라 알고리즘으로 풀었다. 처음에 (N+1) * (N+1) 크기의 2차원 벡터로 풀어봤는데 메모리 초과가 떴다. 어느 부분이 문젠가 해서 검색해 보니 N의 최대 크기가 10,000이라 10,001 * 10,001 크기의 벡터를 선언할 수 있어 메모리 초과가 뜬것 같다. 그래서 이 부분을 pair가 섞인 벡터로 풀었더니 메모리 초과가 안 떴다. 세로가 N+1 크기의 가로는 비어있는 ..

문제 https://www.acmicpc.net/problem/2610 2610번: 회의준비 첫째 줄에 회의에 참석하는 사람의 수 N이 주어진다. 참석자들은 1부터 N까지의 자연수로 표현되며 회의에 참석하는 인원은 100 이하이다. 둘째 줄에는 서로 알고 있는 관계의 수 M이 주어진다. 이 www.acmicpc.net 문제풀이 플로이드 와샬 알고리즘으로 문제를 풀었다. 먼저 1부터 사용하기 때문에 N+1 * N+1 크기의 2차원 벡터를 만들고 -1로 초기화한다. 플로이드 와샬 알고리즘을 이용하여 2차원 벡터에 P1가 몇 번 만에 P2를 만날 수 있는지를 저장한다. 그다음 그룹으로 묶고 그룹에서 거쳐가는 횟수의 최댓값이 가장 작은 사람을 구한다. for (mid = 1; mid M; vectorcmte(N..

문제 https://www.acmicpc.net/problem/1613 1613번: 역사 첫째 줄에 첫 줄에 사건의 개수 n(400 이하의 자연수)과 알고 있는 사건의 전후 관계의 개수 k(50,000 이하의 자연수)가 주어진다. 다음 k줄에는 전후 관계를 알고 있는 두 사건의 번호가 주어진다. www.acmicpc.net 문제풀이 플로이드 와샬 알고리즘을 이용해 풀었다. A B가 있을 때 A가 먼저 일어난 사건이면 history[A][B]는 -1이, B가 먼저 일어난 사건이면 history[A][B]는 1이 된다. A B C가 있을 때 A가 B보다 먼저 일어났고 B가 C보다 먼저 일어났으면, 삼단 논법에 의해 A는 C보다 먼저 일어난 사건 이게 된다. 따라서 삼중 반복문을 통해 [A][B] == -1이..

문제 https://www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 문제풀이 제목 그대로 플로이드 와샬 문제이다. 도시는 n개가 주어지고 버스는 m개가 주어진다. 주의해야 할 점은 예제를 보면 같은 시작 도시, 같은 도착 도시가 나올 수 있다. (1, 4, 1), (1, 4 ,2) 그래서 값을 입력받을 때마다 최솟값을 벡터에 저장해줘야 한다. 그리고 i에서 i를 포함하여 i에서 j를 갈 수 없는 경우는 그 자리에 0을 출력해줘야 한다. 비용은 100,000 ..

문제 https://school.programmers.co.kr/learn/courses/30/lessons/49191 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 플로이드 와샬 알고리즘을 통해 문제를 풀었다. 결과인 results에는 [0] 선수가 [1] 선수를 이겼다는 정보가 담겨있다. 그 말은 [1] 선수는 [0] 선수한테 졌다는 의미도 된다. 따라서 두 정보를 벡터를 만들어 저장한다. 이기면 1, 지면 -1로, 상대전적이 없으면 2로 두었다. 자기 자신과 싸울 수는 없으므로 반복문을 통해 [idx][idx] = 0으로 설정한다. A가 B..

문제 https://school.programmers.co.kr/learn/courses/30/lessons/72413 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 처음에는 DFS로 풀어봤는데 결과가 좋지 않아서 질문글을 봤더니 다른 알고리즘으로 푸는 문제였다. 다익스트라 알고리즘으로 풀 수 있어서 따로 공부를 하고 풀었다. 해당 알고리즘을 모르고 풀 때와 알고 풀 때 푸는 시간이 확연히 차이 났다.. 이 문제에서는 지점이 3개가 나온다 A, B, S. 따라서 A, B, S지점으로 부터 모든 지점까지의 최소 요금을 모두 알아야 한다. A->x ..

문제 https://www.acmicpc.net/problem/1238 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 문제풀 이 다익스트라 알고리즘으로 풀었다. 양방향이 아닌 단방향의 도로의 정보가 주어지므로 조심해야한다. 도로들의 정보를 입력받고, 다익스트라 알고리즘을 통해 최단 거리를 저장한다. ( min_time[town1][town2] = x라면 town1에서 town2로 x의 시간이 걸린다는 의미 ) 반복문을 통해 N마을에서 X마을로 가는 시간, X마을에서 N마을로 가..