https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 1. Logic 부분문제를 3가지로 나눌 수 있다. 포도주를 안마시는 경우 포도주를 1잔 연속해서 마시느 경우 포도주를 2잔 연속해서 마시는 경우 그래서 DP테이블을 정할 때 DP[현재 인덱스][선택 여부] 로 정의했다. 선택 여부 별 의미하는 바는 > 0:이전에 포도주 안마심, 1:이전에 한잔만 마심, 2:이전에 두잔 연속해서 마심 입력으로 받은 첫번째 수에서 선택할지 말지여부를 처리하는 것은, ..
전체 글
알고리즘 문제 풀이와 C++·Spring·프론트엔드 개발, 컴퓨터 과학과 AI 논문을 쉽게 정리하는 기술 블로그입니다.https://www.acmicpc.net/problem/2133 2133번: 타일 채우기 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. www.acmicpc.net 1. Logic 비트필드를 사용하여 현재 위치에서 블럭을 놓은 후 생기는 모양에 대해서 처리해줬다. 그림으로 보면 이 모양(1 | (1
https://www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net 1. Logic 단순 다익스트라에 간단한 후처리를 요구하는 문제이다. 다익스트라로 첫 해킹을 당한 컴퓨터부터 시작해서 감염을 시키고 다익스트라 이후 dist배열 전체를 순회하여 INF가 아닌 배열들의 갯수를 세주면 감염되는 컴퓨터 수를 구할 수 있고 걸리는 시간은 전체 배열을 순회하며 가장 큰 배열의 값을 구하면 된다. 2. Code #include using namespace std; const i..
https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문자 www.acmicpc.net 1. Logic 불의 위치를 담은 queue fire과 지훈이의 위치를 담은 jihun queue 두개를 가지고 풀이했다. 불이 위치한 곳은 애초에 지훈이가 가지 못하고 지훈이가 움직이더라도 불이 오면 안되기 때문에 불을 먼저 BFS를 돌려 움직여줬다. 이후 불이 없는곳에 지훈이를 BFS를 돌려 움직여주면 불이 있는곳을 제외하고 대피할 수 있다. 처음에는 queue 4개를 사용하여..
Post로 MemberDTO로 입력받은 정보를 받았는데 계속 Nickname 칸만 입력을 못 받아오고 있었다. 확인해보니 html 태그에 name="nickname"이 없었다. id태그가 아닌 name태그와 매칭해서 값을 가져오기 때문에 이런 오류가 뜨면 html쪽을 확인해보길 바란다. 수정 전 수정 후
https://www.acmicpc.net/problem/2146 2146번: 다리 만들기 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다 www.acmicpc.net 1. Logic 특정 지점에서 출발하는 것을 선택하지 못하고 선택하더라도 그 지점에서 최솟값이 나오리라고 장담할 수 없다. 그렇기 때문에 도착한 섬이 출발한 섬과 다른 섬인지를 구별하는 아이디어를 떠올려야 하는 문제이다. 문제에서는 섬을 1로 입력받지만 나는 처음에 -1로 받은 뒤 각 섬마다 섬 내부에서 BFS를 돌아서 각 섬에 숫자를 매겨줬다. 각 섬의 번호가 매겨지면 섬마다 BFS를 돌며 다른 섬까..
군대에 처음 들어올 때 세웠던 목표 세가지가 있었다. 목표를 꼭 이루기 위해 블로그에서도 적어놨었다. 그중에 가장 이루고 싶었고 무조건 이루고 나가야겠다고 다짐했던 첫번째 목표인 백준 solved.ac 티어 플래티넘을 달성했다. 이전에는 프로그래밍을 거의 해보지도 않았고 알고리즘이라고 했을때 단순 입출력 받아서 처리하는게 알고리즘인줄 알았다. 지금 생각하면 약간 부끄럽다..ㅎ 이 생각을 군대 들어오기전까지 가지고 있었으니까 얼마 지나지 않은 과거이다. 개발자를 진로로 삼아야겠다는 다짐을 군대 오기 약 3달전에 했으니 그럴수도 있나? 여튼 전공은 컴퓨터공학과지만 진로를 잡은 시기가 늦어 그만큼 남들을 따라잡기 위해 스스로 꾸준히 했다. 문제가 안풀리면 짜증나지만 풀렸을 때 희열감이 미치겠다. 희열감 없었으..
https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 1. Logic 문제에서 포인터를 기준으로 앞 뒤에 문자를 넣거나 삭제하기 때문에 문제를 보는 관점 자체를 아예 포인터 기준으로 나눠서 봤다. 포인터 기준으로 왼쪽에 있는 left deque 오른쪽에 있는 right deque를 선언하여 풀이했다. 2. Code #include using namespace std; int main() { ios_base::sync_with_stdio(false); ..
https://www.acmicpc.net/problem/14921 14921번: 용액 합성하기 홍익대 화학연구소는 다양한 용액을 보유하고 있다. 각 용액은 -100,000,000부터 100,000,000사이의 특성 값을 갖는데, 같은 양의 두 용액을 혼합하면, 그 특성값은 두 용액의 특성값의 합이 된다. 당신 www.acmicpc.net 1. Logic 기본적인 이분탐색 문제이다. 0에 가깝다는 것을 판단하는 것은 절댓값을 통해 가장 작은 값을 찾으면 된다. 2. Code #include using namespace std; int n; vector input; int ans = 0x3f3f3f3f; void solve() { int start = 0; int end = n - 1; while(star..
https://www.acmicpc.net/problem/1477 1477번: 휴게소 세우기 첫째 줄에 현재 휴게소의 개수 N, 더 지으려고 하는 휴게소의 개수 M, 고속도로의 길이 L이 주어진다. 둘째 줄에 현재 휴게소의 위치가 공백을 사이에 두고 주어진다. N = 0인 경우 둘째 줄은 빈 줄 www.acmicpc.net 1. Logic 처음에 이 문제를 보고 0~L까지 거리를 구한 값을 우선순위 큐에 넣은 다음 큰 숫자부터 2로 나눠서 m만큼 반복하면 쉽게 풀릴 것 같다고 생각했다. 하지만 여기에는 반례가 있었다. 만약 테스트 케이스가 0 2 100 다음과 같이 주어졌을때를 가정해 보면 먼저 답은 33이 나와야한다. 우선순위 큐에는 0~100까지 100이 들어가있을 것이다. 우선순위 큐로 항상 2로 ..