본문 바로가기

CS/알고리즘 풀이

[우선순위 큐][백준 1655] 가운데를 말해요 https://www.acmicpc.net/problem/1655  문제백준이는 동생에게 "가운데를 말해요" 게임을 가르쳐주고 있다. 백준이가 정수를 하나씩 외칠때마다 동생은 지금까지 백준이가 말한 수 중에서 중간값을 말해야 한다. 만약, 그동안 백준이가 외친 수의 개수가 짝수개라면 중간에 있는 두 수 중에서 작은 수를 말해야 한다.예를 들어 백준이가 동생에게 1, 5, 2, 10, -99, 7, 5를 순서대로 외쳤다고 하면, 동생은 1, 1, 2, 2, 2, 2, 5를 차례대로 말해야 한다. 백준이가 외치는 수가 주어졌을 때, 동생이 말해야 하는 수를 구하는 프로그램을 작성하시오. 핵심우선순위 큐는 항상 root를 가장 높은 우선순위를 유지하도록 하는 특징이 있다. 풀이입력 값이 주어지는 과정 중에 가.. 더보기
[백준 9251][DP] LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다.예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. 출처: https://www.acmicpc.net/problem/9251    점화식 dp[i][j]: 수열1 i까지, 그리고 수열 j 까지 최장 공통 부분 수열 길이   수열 ACAYKP, CAPCAK에 대해 점화식을 2차원 배열로 표현하면 다음과 같다. 원소 하나에 대해 3가지 방향으로부터 영향을 받아 값이 정해진다.  특징LCS 기본 문제 점화식 루프를 돌때 배열의 범위를 벗어나지 않게 조심해야 한다. 따라서 i 또는 j가 0인 경우는 따로 로직으로 처리해줄 수.. 더보기
[백준 4796][분류 수학] 캠핑 문제등산가 김강산은 가족들과 함께 캠핑을 떠났다. 하지만, 캠핑장에는 다음과 같은 경고문이 쓰여 있었다.캠핑장은 연속하는 20일 중 10일동안만 사용할 수 있습니다.강산이는 이제 막 28일 휴가를 시작했다. 이번 휴가 기간 동안 강산이는 캠핑장을 며칠동안 사용할 수 있을까?강산이는 조금 더 일반화해서 문제를 풀려고 한다. 캠핑장을 연속하는 P일 중, L일동안만 사용할 수 있다. 강산이는 이제 막 V일짜리 휴가를 시작했다. 강산이가 캠핑장을 최대 며칠동안 사용할 수 있을까? (1 https://www.acmicpc.net/problem/4796  풀이V 휴가 중 최대한 많이 캠핑장을 예약하려고 한다. 연속 P일 이내에서는 최대 L일만 예약이 가능하다. 그런데 연속 P일 이후에 남은 일자에 대해서는 2가지 .. 더보기
[프로그래머스 Java]가장 많이 받은 선물 해결과정1. 가공할 데이터모든 친구 A에 대해A가 모든 모든 친구와 선물한 개수 Map>A의 선물 지수Map2. 로직 수행 문제 설명 그대로 로직 수행하면 된다.- A, B 기록 유무는 A가 B한테 준 선물과 B가 A한테 준 선물이 모두 0인 경우. 따라서 A, B가 서로한테 준 선물이 동일한 경우에 포함된다. - A give는 A가 B에게 선물한 개수  주의목표가 제일 많이 선물받은 경우를 구해야하는 것이다. 따라서 친구 데이터 이중 루프를 돌때, 매번 A -> B 선물, B -> A 선물을 체크하면 출력은 답의 2배가 된다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354.. 더보기
[프로그래머스 자바] 유사 칸토어 비트열 문제 설명수학에서 칸토어 집합은 0과 1 사이의 실수로 이루어진 집합으로, [0, 1]부터 시작하여 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만들어집니다.남아는 칸토어 집합을 조금 변형하여 유사 칸토어 비트열을 만들었습니다. 유사 칸토어 비트열은 다음과 같이 정의됩니다.0 번째 유사 칸토어 비트열은 "1" 입니다.n(1 ≤ n) 번째 유사 칸토어 비트열은 n - 1 번째 유사 칸토어 비트열에서의 1을 11011로 치환하고 0을 00000로 치환하여 만듭니다.남아는 n 번째 유사 칸토어 비트열에서 특정 구간 내의 1의 개수가 몇 개인지 궁금해졌습니다.n과 1의 개수가 몇 개인지 알고 싶은 구간을 나타내는 l, r이 주어졌을 때 그 구간 내의 1의 개수를 return 하도록 solut.. 더보기
[백준 2805] 나무 자르기 문제상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다.목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20, 15, 10, 17이라고 하자. 상근이가 높이를 15로 지정했다면, 나무를 자른 뒤의 높이는 15, 15, .. 더보기
[ 백준 2003 ] 수들의 합 2 https://www.acmicpc.net/problem/2003 풀이 이중루프로 i, j 탐색을 하면 N이 10^5이기 때문에 시간초과에 걸린다. 그래서 누적합 또는 투포인터로 풀면 통과할 수 있다. 1) 누적합 (prefix sum) 누적합으로 풀 수는 있는데 N이 더 컸더라면 누적합으로는 풀 수 없다. long[] pre = new long[N+1]; st = new StringTokenizer(br.readLine()); for(int i = 1 ; i 더보기
[ 백준 14891 ] 톱니바퀴 ( 자바 ) https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터www.acmicpc.net 핵심1. call by reference가 아닌 call by value로 dfs 값 전달dfs의 종료 조건들을 상단에 두기 위해서 문제 흐름과 조금 순서가 바뀌었다. 예를들어 처음 A 톱니바퀴 회전 요청 -> A 톱니바퀴 회전 -> 맞물린 옆 B 톱니바퀴 회전 요청 -> B톱니바퀴가 A톱니바퀴와 맞물린 극이 다른지 체크 -> ... 와 같은 순서로 구현했다. 그런데 이 때 'B톱니바퀴가 A톱니.. 더보기