67260

날짜: 2022년 5월 5일 오후 4:07 코드 Algorithm/67260.py at main · Junroot/Algorithm 풀이 9328 위 문제와 같은 유형이다. 다음에 방문할 방이 잠겨있으면 열수있는 방에 방문했었는지 확인하고, 방문하지 않았다면 대기방에 추가해두면 된다.

2024-09-15 · 1 min · 31 words

67259

날짜: 2022년 5월 4일 오후 5:19 코드 Algorithm/67259.py at main · Junroot/Algorithm 풀이 자동차가 좌회전이나 우회전을 하면 500원이라는 추가적인 비용이 드는 dp를 이용한 bfs 문제로 풀 수 있다. 기본적은 bfs와 차이점은 현재 자동차의 방향에 따라 비용이 달라지기 때문에 dp로 문제를 풀 때 현재 자동차의 방향에 따라 다르게 캐싱을 해야된다. 구현을 하다가 한가지 실수한 점이 있는데, 자동차가 좌회전이나 우회전을 할 경우 코너만 추가되는 것이아니라 코너 1개 + 직선 도로 1개 가 추가 되는 것이므로 600원이 추가되어야한다....

2024-09-15 · 1 min · 75 words

67258

날짜: 2022년 3월 11일 오후 11:09 코드 Algorithm/67258.py at main · Junroot/Algorithm 풀이 투 포인터로 문제를 풀면 된다. start와 end 인덱스를 두고 start부터 시작하여 모든 보석을 가질 수 있는 end를 1씩 늘리면서 찾는다. 그 다음 start를 1늘리고 end를 다시 1씩 늘리며 찾는다. 보석의 개수를 세기위해 dictionary를 사용했다. 모든 보석이 있는지 확인하기 위해 dictionary의 모든 value 값을 곱해서 0이 아닌지 확인했는데 시간초과가 발생해서, 현재 dictionary에 value가 0인 보석을 저장하는 set을 별도로 만들어서 관리했다....

2024-09-15 · 1 min · 87 words

67257

날짜: 2022년 5월 4일 오후 5:11 코드 Algorithm/67257.py at main · Junroot/Algorithm 풀이 모든 우선 순위의 경우를 다 계산해보고 가장 큰 값을 찾으면 된다. 문자열로 담긴 수식을 계산하는 것을 stack을 이용했다.

2024-09-15 · 1 min · 31 words

67256

날짜: 2022년 5월 4일 오후 5:08 코드 Algorithm/67256.py at main · Junroot/Algorithm 풀이 단순한 구현 문제다. 문제에 명시되 여러 분기들을 조건문으로 나누어서 해결하면 된다.

2024-09-15 · 1 min · 24 words

65062

날짜: 2022년 5월 6일 오후 8:03 코드 Algorithm/64062.py at main · Junroot/Algorithm 풀이 연속으로 k개의 돌이 숫자가 0이되는 순간을 찾는 문제다. 이를 해결하기 위해서 각 구간별로 ‘모든 돌이 0이되는데 걸리는 시간’을 구하고 이중 가장 작은 값을 찾았다. 이렇게 문제를 바꾸어 풀게되면 stones배열을 순차적으로 탐색하여 현재 구간에서 가장 큰 숫자를 찾는 과정을 구현하면 됐다. 이 문제는 dictionary와 priority queue를 사용해서 해결했다.

2024-09-15 · 1 min · 60 words

64065

날짜: 2022년 5월 6일 오후 8:02 코드 Algorithm/64065.py at main · Junroot/Algorithm 풀이 집합의 길이를 기준으로 정렬을 한 뒤, 차집합을 이용해 튜플을 구하면된다. 다른 사람 풀이를 보니 문자열을 통해 집합을 구할 때, split을 이용하는 방법도 있었다.

2024-09-15 · 1 min · 36 words

64064

날짜: 2022년 3월 11일 오후 12:58 코드 Algorithm/64064.py at main · Junroot/Algorithm 풀이 크게 두 가지 문제로 나눌 수 있다. 제재 아이디에 매칭되는 아이디들 구하기 나올 수 있는 아이디의 조합 구하기 1번 문제는 간단한 문자열 비교 문제니 설명하지 않겠다. 2번 문제를 해결하기 위해서 각 제재 아이디가 매칭될 수 있는 아이디의 인덱스를 저장해두고, 각 제재 아이디 별로 아이디를 하나씩 선택는 경우의 수를 구했다. 이때 아래의 두 가지 조건을 조심해야되는데 이를 놓쳤다....

2024-09-15 · 1 min · 146 words

64063

날짜: 2022년 5월 6일 오후 8:02 코드 Algorithm/64063.py at main · Junroot/Algorithm 풀이 다음 방정보를 구하는 과정을 캐싱을 통해 저장할 수 있다. 처음에는 list를 통해 캐싱을 했는데 k의 범위가 10^12이므로 이는 문제가 된다. 이를 해결하기위해 dictionary를 사용하여 실제로 캐싱이 필요한 정보만 저장하는 방식으로 구현했다.

2024-09-15 · 1 min · 44 words

64061

날짜: 2022년 5월 6일 오후 8:01 코드 Algorithm/64061.py at main · Junroot/Algorithm 풀이 stack을 이용하면 되는 문제다. 복잡한 로직은 필요하지 않다.

2024-09-15 · 1 min · 21 words

60063

날짜: 2022년 6월 29일 오후 1:39 코드 Algorithm/60063.py at main · Junroot/Algorithm 풀이 BFS를 통해 최소 경로를 탐색하면된다. 여기서, 로봇이 이동할 수 있는 경우를 체크하는 과정이 조금 복잡하다. 조건문을 이용한 분기처리로 구현해야된다.

2024-09-15 · 1 min · 32 words

60062

날짜: 2022년 6월 28일 오후 3:58 코드 Algorithm/60062.py at main · Junroot/Algorithm 풀이 결론부터 말하면 완전탐색이다. 나같은 경우는 dist가 가장 큰 값의 위치를 먼저 선택한 뒤, 원형을 직선으로 변환한 뒤 직선 형태로 만든 뒤 가장 적은 사람이 필요한 경우를 찾았다. 이렇게 하면 점화식 형태로 문제를 풀 수 있기 때문이다.

2024-09-15 · 1 min · 49 words

60061

날짜: 2022년 6월 28일 오후 3:54 코드 Algorithm/60061.py at main · Junroot/Algorithm 풀이 문제 조건을 그대로 구현하는 시뮬레이션 문제다. 구조물을 제거할 때는 일단 제거하고 자신이 영향을 줄 수 있는 구조물들을 ‘구조물을 추가할 때의 조건’을 만족하는지를 체크했다.

2024-09-15 · 1 min · 36 words

60060

날짜: 2022년 6월 28일 오후 3:52 코드 Algorithm/60060.py at main · Junroot/Algorithm 풀이 바이너리 서치를 이용해서 문제를 풀었다. words를 정렬한 뒤, 쿼리를 만족하는 word를 lower bound와 upper bound의 차로 개수를 구했다. 쿼리와 단어를 비교하는 법은 아래와 같다. 글자 길이가 다른 경우 길이가 더 짧은 것을 작은 값으로 취급 글자 길이가 같은 경우 사전순 비교 쿼리에 ?가 나온 순간부터 같은 단어로 취급(접미사가 ?인 경우를 고려해서다. 접두사의 경우는 처리하지 않았다. 위 방식대로 하면 접두사에 ?...

2024-09-15 · 2 min · 306 words

60059

날짜: 2022년 3월 8일 오후 3:47 코드 Algorithm/60059.py at main · Junroot/Algorithm 풀이 단순히 모든 경우의 수를 다 구해보면 되는 문제다. 겹쳐지는 부분 계산을 좀 신경써야되는데, 특정 lock위치에 대한 key의 위치값 차이를 delta로 두고 모든 가능한 delta값을 루프를 돌면서 탐색했다.

2024-09-15 · 1 min · 40 words

60058

날짜: 2022년 6월 23일 오전 11:45 코드 Algorithm/60058.py at main · Junroot/Algorithm 풀이 단순 구현문제다.

2024-09-15 · 1 min · 15 words

60057

날짜: 2022년 6월 20일 오전 10:45 코드 Algorithm/60057.py at main · Junroot/Algorithm 풀이 문자열의 길이가 최대 1000밖에 되지 않으므로, 모든 압축 단위를 한 번씩 진행해도 O(n^2)로 시간초과가 발생하지 않을 것이다.

2024-09-15 · 1 min · 30 words

49191

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/49191.py at main · Junroot/Algorithm 풀이 자신이 이길 수 있는 상대인지 확인하기 위해서 방향그래프 사용하니 해결할 수 있었다. a가 b를 이겼다고 했을 때, a→b로 연결하는 식으로 그래프를 만들면된다. 문제의 예시의 경우는 아래 그림과 같다. 이렇게 그래프를 만든 뒤, 자신이 도착할 수 있는 노드들은 모두 자신이 이길 수 있는 선수들이 된다. 4는 (2, 3, 5)를 이길 수 있다. 자신이 지는 선수의 경우에도 위의 방법으로 그래프를 그려서 구할 수 있다....

2024-09-15 · 1 min · 106 words

49190

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/49190.py at main · Junroot/Algorithm 풀이 내 풀이 선을 그으면서 도형이 언제 생기는지 생각해보면 된다. 답은 기존에 그어져있던 선과 만나는 순간에 방이 하나 늘어난다. 그럼 선이 만나는 순간이 언제인지를 고려해보면 된다. 새로운 선을 그으면서, 기존에 방문한 점으로 이동하는 경우 새로운 선을 그으면서, 대각선을 그을 때 맞은 편 대각선이 이미 그어져 있는 경우 이 두 가지의 상황만 고려해서 시뮬레이션 하면 쉽게 해결이 가능하다. 다른 사람 풀이 다른 사람 풀이를 봤는데 너무 좋은 풀이법이 있어서 가져왔다....

2024-09-15 · 1 min · 172 words

49189

날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/49189.py at main · Junroot/Algorithm 풀이 문제를 읽고 다익스트라를 사용하면 풀 수 있다고 쉽게 캐치했다. 하지만 몇몇 테스트 케이스에서 타임 아웃이 발생했는데, q에서 무시할 데이터의 조건을 잘못 썼기 때문이다. if distances[now] < distance: continue 처음에 이렇게 조건을 작성했는데, 같은 경우도 이미 최단 경로로 등록된 노드기 때문에 굳이 큐에 넣는 작업이 필요없다. if distances[now] <= distance: continue

2024-09-15 · 1 min · 63 words