43162

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/43162.py at main · Junroot/Algorithm 풀이 컴퓨터 리스트를 순서대로 확인하면서 방문한 컴퓨터들을 체크하는 리스트를 별도로 만들었다. 이 때, 방문하지 않은 컴퓨터가 있다면 그 컴퓨터와 연결된 모든 컴퓨터를 먼저 방문처리하게되면 네트워크의 개수를 알수 있게된다. 연결된 컴퓨터들을 방문처리할 때는 bfs, dfs 상관이 없기때문에 조금이나마 빠른 bfs를 사용했다.

2024-09-15 · 1 min · 52 words

43105

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/43105.py at main · Junroot/Algorithm 풀이 각 위치별로 이동할 때 나올 수 잇는 최대값을 저장하는 삼각형을 만들었다. 이 삼각형을 만들기위한 점화식은 간단했다. $a_{x,y}$를 y번 째줄의 x번 째 숫자로 정의를 하면 다음과 같은 점화식이 나온다. $$ a_{x,y} = max(a_{x-1, y-1}, a_{x, y-1}) $$ 삼각형이 완성이 되면 가장 아래줄의 수 중에서 가장 큰 값을 찾으면된다.

2024-09-15 · 1 min · 60 words

42898

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42898.py at main · Junroot/Algorithm 풀이 일단 해당 위치가 물에 잠긴 지역인지 매번 루프를 돌며 확인하는 것은 비효율 적이라고 생각해서 2차배열로 미니맵을 만들었다. 물에 잠긴 지역은 -1 아닌 곳은 0으로 저장을 했다. 그 후, 경우의 수를 계산했다. (x, y)위치는 (x - 1, y)의 경우의 수 + (x, y - 1)의 경우의 수가 될 것이다. (1, 1)의 위치는 경우의 수가 1이고, 점차적으로 이동할 수 있는 경우의 수를 계산하면 됐다....

2024-09-15 · 1 min · 112 words

42897

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42897.py at main · Junroot/Algorithm 풀이 원이 아니라 일직선일 경우는 DP로 쉽게 풀 수 있다는 사실을 알고 있었다. 그럼 이 문제를 일직선으로 변형할 수 있다면 쉽게 해결이 가능하다. 이를 하는 방법은 특정 한 집을 기준으로 털었을 경우아 털지 않은 경우로 나누어서 DP문제를 풀면된다. 털었을 경우에는 그 집의 좌우를 제외하고 DP문제로 풀면되고, 털지 않은경우는 이웃한 집을 포함해서 풀면된다. 그렇게 나온 결과 중 더 큰 값이 문제의 정답이 된다....

2024-09-15 · 1 min · 74 words

42895

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42895.py at main · Junroot/Algorithm 풀이 DP로 문제를 해결할 때, 어떤 값을 기준으로 점화식을 만들지 정하는 것에 어려움이 있었다. 고민 끝에 내린 결론은 $a_n$을 (N을 n번 사용해서 만들 수 있는 수의 집합)이라고 정의했다. 그렇데되면 점화식은 다음과 같다. 여기서 *연산은 (좌변의 원소와 우변의 원소가 사칙연산을 해서 나올 수 있는 값들의 집합)이다. 사칙 연산은 어차피 좌변과 우변의 연산으로 이루어지기 때문에 점화식은 성립 가능하다. 이 때, 한 가지 예외가 있으니 주의해야된다....

2024-09-15 · 1 min · 90 words

42894

날짜: 2022년 7월 5일 오후 11:26 오답: o 코드 Algorithm/42894.py at main · Junroot/Algorithm 풀이 단순 구현 문제다. 쌓을 수 있는 모든 영억에 검은 블록을 쌓아두고 지워지는 블록이 있을 때까지 계속 지우면서 반복한다. 구현하면서 실수가 많이 발생하므로 구현연습이 필요할 때, 다시 풀어보는 것을 권장한다.

2024-09-15 · 1 min · 44 words

42890

날짜: 2022년 6월 29일 오후 1:44 코드 Algorithm/42890.py at main · Junroot/Algorithm 풀이 가능한 모든 컬럼의 조합을 구한 뒤, 유일성을 체크하고, 최소성을 체크하면된다. 이 때 컬럼의 조합은 개수가 적은 조합부터 처리한다. 유일성: 해당 컬럼 조합에 중복이 없는지 확인하고, 없다면 유일하다. 최소성: 이미 존재하는 후보키의 조합을 부분 집합으로 가지는 경우가 없다면 최소성을 만족한다.

2024-09-15 · 1 min · 52 words

42889

날짜: 2022년 6월 29일 오후 1:41 코드 Algorithm/42889.py at main · Junroot/Algorithm 풀이 각 스테이지 별 유저 수를 세고나서, 누적합을 통해 각 스테이지를 지나간 유저들을 구하면 실패율을 구할 수 있다.

2024-09-15 · 1 min · 30 words

42888

날짜: 2022년 6월 29일 오후 1:40 코드 Algorithm/42888.py at main · Junroot/Algorithm 풀이 기록을 두 번읽어서 해결할 수 있다. 첫번째로 읽을 때는 각 유저의 최종 닉네임을 찾고, 두번째에서는 채팅방에 출력될 내용을 처리하면된다.

2024-09-15 · 1 min · 32 words

42885

날짜: 2022년 1월 31일 오후 5:51 코드 https://github.com/Junroot/Algorithm/blob/main/programmers/42885.py 풀이 가장 무거운 사람부터 처리한다는 생각으로 접근했다. 무인도에 남은 사람 중 가장 무거운 사람과 가장 가벼운 사람이 같이 배에 탈 수 있는지를 반복해서 비교해봤다. 왜 가장 가벼운 사람과 타는게 문제가 없는지 의문이 생길 수 있다. 예를들어 A>B>C>D 순으로 무겁다고 가정했을 때, (A, C)가 함께 탈 수 있는데 (A, D)가 함께 타면 문제가 생기지 않냐고 생각할 수도 있다. (B, D)는 함께 탈 수 있는데 (B, C)는 함께 못 타는경우가 있을 수 있기 때문이다....

2024-09-15 · 1 min · 129 words

42884

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42884.py at main · Junroot/Algorithm 풀이 도착 지점이 빠른 구간 순으로 접근하면 풀이가 쉬워진다. 자신보다 먼저 끝나는 구간이 존재하지 않기 때문에 해당 구간의 마지막 위치에 카메라를 두고, 해당 위치를 지나는 모든 구간은 새로 카메라를 둘 필요가 없어진다. 따라서 이 방법이 최소의 카메라 수를 가지게 된다는 것을 보장할 수 있다.

2024-09-15 · 1 min · 56 words

42883

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42883.py at main · Junroot/Algorithm 풀이 가장 앞 자리수가 큰 것이 중요하다는 점을 파악하면 해결하기 쉽다. k개를 지운다는 뜻은 (number의 길이) - k 개의 숫자를 선택해서 수를 만든다고 접근하는 것이 나에게는 더 쉬웠다. n개의 숫자 중 k개의 숫자를 선택해야될 때, 제일 앞 자리 숫자는 [0, n - k) 범위의 인덱스 중에 선택해야된다. 따라서 이 범위 중에 가장 큰 수를 선택하면 된다. 사실, 풀이법은 금방 생각했는데 처음에 재귀 함수를 이용하여 구현을 했다가 계속해서 시간 초과가 발생했다....

2024-09-15 · 1 min · 121 words

42862

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42862.py at main · Junroot/Algorithm 풀이 가능하면 자신의 앞 사람의 옷을 빌리도록 시도하게 구현했다. 이렇게하면, 서로 빌리려는 사람이 겹치는 경우가 사라진다. 주의해야될 점은 lost와 reserve의 정보가 번호 순서대로 들어오지 않을 수 있기 때문에 정렬을 해야된다.

2024-09-15 · 1 min · 42 words

42861

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42861.py at main · Junroot/Algorithm 풀이 최소의 비용으로 연결하기 위해서는 n - 1개의 다리만 있으면 된다는 점을 파악해야된다. 나는 가장 짧은 간선부터 선택해보면서 사이클이 발생하지 않도록만 하면 최소 비용으로 연결이 될 것이라고 생각했다. 이를 위해서 최소 값을 찾아서 꺼내기 쉬운 우선순위 큐를 사용해봤다. 사이클이 발생하는지 확인하는 방법에 대해서 고민을 좀 했었다. 내가 사용한 방법은 서로 연결되어 있는 섬들의 집합을 ‘그룹’이라고 정의하고, 그 그룹을 대표하는 섬 하나를 ‘부모(parent)‘라고 정의했다....

2024-09-15 · 1 min · 132 words

42860

날짜: 2022년 1월 31일 오후 5:50 코드 Algorithm/42860.py at main · Junroot/Algorithm 풀이 문제를 수평 이동과 수직 이동으로 크게 나눌 수 있다. 수직 이동 수직 이동에 대한 처리는 그렇게 어렵지 않다. 알파벳이 26개인것만 알고 있다면. 수평 이동 수평 이동에 대한 처리에서 놓쳐서는 안되는 경우가 있다. 오른쪽으로 이동했다가 왼쪽으로 쭉 이동하는 경우가 더 짧을 수도 있다 라는 점이다. 나는 이를 해결하기 위해 2가지 문제로 나눠서 풀었다. 그림으로 표현하면 다음과 같다. 모든 연속된 ‘A’ 구간 찾기 이 부분은 리스트를 처음부터 끝까지 한 번만 스캔해서 찾아냈다....

2024-09-15 · 1 min · 129 words

42842

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42842.py at main · Junroot/Algorithm 풀이 일단 내가 푼 방법은 문제에서 의도한 방법은 아닌 것으로 보인다. brown + yellow = (가로) * (세로) yellow = ((가로) - 2) * ((세로) - 2) 라는 식을 적어 놓은 뒤 이차방적식으로 문제를 풀면 O(1)으로 문제 풀이가 가능하다. 문제 의도인 완전 탐색으로 문제를 풀어도, 위 두 개의 식을 이용할 수 있을 것으로 보인다. def solution(brown, yellow): sum = brown + yellow for h in range(1, brown + yellow + 1): if sum % h == 0: w = sum // h if yellow == (w - 2) * (h - 2): return [w, h]

2024-09-15 · 1 min · 107 words

42840

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42840.py at main · Junroot/Algorithm 풀이 각 수포자의 점수 구하기 1등 수포자들 구하기 이렇게 2개의 소문제로 나눌 수 있다. 1번 문제는 약수를 이용하면 쉽게 점수를 구할 수 있다. 각 수포자들은 일정한 주기의 찍기 패턴을 가지고 있다. 1번 수포자는 주기가 5, 2번 수포자는 8, 3번 수포자는 10이다. (문제 번호) % (수포자의 패턴 주기)를 하면 수포자가 패턴의 몇 번째를 사용했는지 파악할 수 있게된다. 2번 문제는 먼저 최대 점수를 구하고 최대 점수에 해당하는 사람들을 전부 찾는 방식으로 구현했다....

2024-09-15 · 1 min · 82 words

42839

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42839.py at main · Junroot/Algorithm 풀이 종이 조각으로 만들 수 있는 모든 수 구하기 만들어진 수 중에 가장 큰 수 이하의 모든 소수 구하기 소수 리스트에 만들어진 수가 포함된 것의 개수 구하기 이렇게 3가지 소문제로 나눴다. 이렇게 접근한 이유는 숫자마다 소수인지 검증하는 과정을 매번 계산하는 것이 비효율적이라고 생각했기 때문이다. 1번 문제의 경우 파이썬의 itertools라는 모듈에 permutations 함수를 사용해도되지만 이번에는 모든 순열을 구하는 함수를 직접 구해봤다....

2024-09-15 · 2 min · 259 words

42748

날짜: 2022년 1월 31일 오후 5:51 코드 https://www.notion.so 풀이 복잡한 로직이 없어서 쉽게 풀 수 있다. 인덱스 i-1부터 j-1까지 리스트를 자른 다음 정렬하고, k-1번째 인덱스의 값을 찾으면 된다. 문제에서 i, j, k를 1번부터 세는 것에 유의해야된다.

2024-09-15 · 1 min · 36 words

42747

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42747.py at main · Junroot/Algorithm 풀이 발표한 논문의 수가 1000편이하기 때문에, h=1000부터 하나씩 내려오면서 가능한지 확인해도 처리속도가 빠를 것이라고 생각이 들었다. 이 때, h값을 하나씩 줄이면서 전 단계에서 세었던 논문의 개수를 다시 셀 필요가 없을 것으로 보였다. citations를 역순으로 정렬한 뒤, h를 1씩 줄이고 h값을 만족하는 논문의 수가 h값 이상 인 경우에 그 h를 반환하도록 구현했다. 다른 사람의 풀이를 봤는데 너무 충격적이여서 여기에도 남겨본다....

2024-09-15 · 1 min · 125 words