CS 132

99클럽 코테 스터디 3일차 TIL: [프로그래머스] 다리를 지나는 트럭

https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제를 딱 보고 큐를 떠올리긴 했지만 효율적인 구현을 떠올리지 못했다. 다리에 올라간 트럭은 다리 길이만큼 다리에 머무르게 되는데, 이를 어떻게 구현하는게 효율적일지 고민하다가 혼자 힘으로 풀지 못했다. 주요 포인트는 다음과 같다.처음에 다리 길이만큼 0을 넣는다.그리고 다리에 트럭을 올릴 수 있으면(무게가 가능하면) 올린다. 반면 올릴 수 없으면 트럭대신 0을 올린다.즉, 큐에는 0이든 트럭이든 다리..

CS/Algorism 2024.05.22

99클럽 코테 스터디 2일차 TIL: [백준] 2179. 비슷한 단어

https://www.acmicpc.net/problem/2179 반복문을 통해 단순히 구현하면 되는 문제이다. 단순한 문제 같지만 헤맸다. substring()을 통해 두 문자열을 비교하면 메모리 초과가 난다. 따라서 charAt으로 각 자리를 비교하면 된다. 그리고 비교 결과 다르면 반복문을 빠져나오면 된다.접두사 길이가 가장 긴 두 개 이상의 문자열을 set이나 list에 저장하려고 했으나, 굳이 할 필요 없다. 어차피 문자열들 중 가장 먼저 입력된 문자열 2개를 출력해야 하는데, sameCount와 sameCountMax가 같은 경우에 값을 갱신하지 않고 sameCount > sameCountMax인 경우에만 값을 갱신하면 자연스럽게 가장 먼저 입력된 문자열 2개만 출력할 수 있다.import j..

CS/Algorism 2024.05.21

99클럽 코테 스터디 1일차 TIL: [프로그래머스] 베스트앨범

https://school.programmers.co.kr/learn/courses/30/lessons/42579 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr정렬 조건에 주의해야 하며, 그 외로는 해시를 사용하여 단순히 구현만 하면 되는 문제이다. 그런데 이렇게도 생각하고 저렇게도 생각해야 해서 간단한듯 좀 지저분하게 코드를 짠 거 같다.. 좀 더 효율적으로 풀 수 있는 방법이 생각나면 수정해야겠다. 그리고 항상 동적으로 배열 길이가 정해질 때, List에 값을 먼저 채운 후 list.size() 만큼의 크기의 배열을 선언하여 리스트 값을 배열로 옮기는 작..

CS/Algorism 2024.05.20

[백준] 2240. 자두나무

https://www.acmicpc.net/problem/2240 2240번: 자두나무 자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어 www.acmicpc.net 이 문제는 처음에 봤을 때는 풀이를 봐도 이해를 못했다가 다음 날 다시 차근차근 생각해보니 스스로 풀 수 있었던 문제이다. 역시 dp는 i = 0부터 하나씩 생각하면서 dp 배열을 채워나가다 보면 규칙을 발견하게 되는 거 같다. 1초일 때, 2초일 때, ... w초일 때까지의 최대로 획득한 자두 개수를 구해야 한다. 그런데 몇 번 움직였는지에 따라 경우가 나뉘므로 dp 배열은 2차원 배열로, dp[][] ..

CS/Algorism 2024.04.22

[백준] 11562. 백양로 브레이크

https://www.acmicpc.net/problem/11562 11562번: 백양로 브레이크 서울 소재 Y모 대학교에서 대규모 공사를 진행하면서, 학교가 마치 미로처럼 변해버리고 말았다. 공사 이전까지는 어떤 건물에서 출발하더라도 다른 모든 건물로 갈 수 있는 길이 있었으나, 공 www.acmicpc.net 플로이드 워셜 알고리즘을 통해 간단한 풀이가 나오는 문제이다. 그런데 나는 플로이드는 알았지만 알고리즘을 적절하게 사용하는 아이디어를 떠올리지 못해서 못 푼 문제이다. 양방향으로 바꿔야 하는 길의 수를 찾아야 한다. 따라서 양방향으로 바꿔줄 필요가 없으면, 길을 1번 건너든 2번 건너든 같다. 즉, start 노드와 end 노드가 양방향 길을 가졌으면, dist[start][end] = 0, ..

CS/Algorism 2024.04.21

[백준] 1600. 말이 되고픈 원숭이

https://www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net 도착점에 도착하는 최소 시간을 구하면 되므로 bfs를 사용하면 된다. 말의 움직임으로 움직일 수도 있고, 상하좌우로 움직일 수도 있다. 따라서 하나의 노드에 최소 시간으로 도착하는 경로는 여러 개일 수 있다. 예를 들어 (0, 0)에서 (1, 1)로 이동한다고 가정했을 때, 다음과 같이 2가지 방법으로 최소 시간으로 도착할 수 있다. 상하좌우로만 움직였을 때: 2의 시간이 걸린다..

CS/Algorism 2024.04.18

[백준] 8980. 택배

https://www.acmicpc.net/problem/8980 8980번: 택배 입력의 첫 줄은 마을 수 N과 트럭의 용량 C가 빈칸을 사이에 두고 주어진다. N은 2이상 2,000이하 정수이고, C는 1이상 10,000이하 정수이다. 다음 줄에, 보내는 박스 정보의 개수 M이 주어진다. M은 1이 www.acmicpc.net 이 문제는 그리디로 풀면 된다. 트럭에 실을 수 있는 택배의 총량이 c인데, c는 최대한 도착점이 가까운 택배들로 채워져야 한다. 그래야 금방 택배를 내리고 새로운 택배를 실을 수 있기 때문이다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ja..

CS/Algorism 2024.04.16

[백준] 16929. Two Dots

https://www.acmicpc.net/problem/16929 16929번: Two Dots 첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문 www.acmicpc.net 인접한 같은 알파벳들을 탐색하며 사이클 유무를 판단하면 된다. 이때 dfs를 사용하면 된다. 처음에 bfs로 시도했는데, 사이클 유무를 판단하는 것이 목적이므로 dfs가 더 적합한 거 같다. dfs로 탐색하다가, 다음 노드가 탐색의 시작 노드와 같아지면 사이클이 존재하는 것이다. 그런데 다음과 같은 경우, (0, 0)의 A 노드를 시작으로 dfs를 했을 때 사이클이 존재하지 않는다. 따라..

CS/Algorism 2024.04.12

[백준] 1261. 알고스팟

https://www.acmicpc.net/problem/1261 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net bfs를 통해 (0, 0)부터 (n-1, m-1)까지 이동하면 된다. 다음 노드가 방이면 이어서 이동하고, 다음 노드가 벽이면 부수고 이동한다. 즉, 큐에 벽을 부순 횟수도 담아주어야 한다. 그리고 벽을 부쉈을 때 굳이 1을 0으로 변경해줄 필요가 없으며, 방문처리만 해주면 된다. 중요한 점은 우선순위 큐를 사용해서, 벽을 부순 횟수가 적은 노드부터 꺼내야 한다는 것이다. 만..

CS/Algorism 2024.04.11

[백준] 17182. 우주 탐사선

https://www.acmicpc.net/problem/17182 17182번: 우주 탐사선 우주 탐사선 ana호는 어떤 행성계를 탐사하기 위해 발사된다. 모든 행성을 탐사하는데 걸리는 최소 시간을 계산하려 한다. 입력으로는 ana호가 탐색할 행성의 개수와 ana호가 발사되는 행성의 위 www.acmicpc.net 예를 들어 n이 3이고 시작점이 0일 때, (0 ➡️ 1로 가는 거리 + 0 ➡️ 2로 가는 거리)가 아닌 (0 ➡️ 1로 가는 거리 + 1 ➡️ 2로 가는 거리)가 더 짧을 수도 있다. 즉, 시작점에서 각 노드로 가는 거리만 최소로 갱신할 것이 아니라, 모든 노드에서 모든 노드로의 거리를 최소로 갱신하여 비교해야 한다. 따라서 플로이드 워셜을 사용해야 한다. 플로이드 워셜을 통해 map 배..

CS/Algorism 2024.04.11