목록전체 글 (370)
GitHubSeob
문제 https://www.acmicpc.net/problem/1717 문제풀이 숫자 두 개가 속한 집합을 합치거나, 같은 집합인지 확인을 하는 유니온 파인드의 기본 문제이다.집합 중 가장 작은 수를 나타내는 parent 벡터를 이용한다.집합의 가장 작은 수를 찾는 find 함수, 두 집합을 합치는 Union함수, 두 숫자가 같은 집합인지 확인하면 isUnion함수를 선언한다. int find(vector&parent, int num) { if (parent[num] == num) return num; return parent[num] = find(parent, parent[num]);}집합의 가장 작은 수가 num과 같다면 바꿀 필요가 없으므로 그대로 둔다.그렇지 않으면 parent[num]을 가장 ..
문제 https://www.acmicpc.net/problem/10942 문제풀이 팰린드롬이란 역순으로 읽어도 같은 말이 되는 말을 의미한다.앞 뒤를 바꿔서 기존과 같은 수열이면 YES를 출력하면 되는 문제이다. 팰린드롬이 되는 시작 인덱스와 끝 인덱스를 2차원 벡터로 표현하였다.ex) 1부터 3자리까지 팰린드롬이면 vector[1][3]=true, 거짓이면 vector[1][3]=false 시작 인덱스가 팰린드롬의 중간 인덱스로 두고 문제를 풀었다.그리고 팰린드롬 수의 길이를 홀수, 짝수의 경우로 나눴다.홀수인 경우, 시작 지점 앞뒤로 수가 있고 앞뒤 숫자가 같으면 vector[start-idx][start+idx]=true가 된다.idx는 1부터 팰린드롬 수의 끝까지 증가한다, 중간에 팰린드롬 수가..

문제 https://www.acmicpc.net/problem/1932 문제풀이 맨 위층부터 시작해서 아래에 있는 수를 선택해가며 내려가고, 합한 값 중 최댓값을 출력하는 문제이다.DP를 이용해서 해당 삼각형을 편하게 2차원 벡터로 나타내면73 88 1 02 7 4 44 5 2 6 5이런식으로 나타낼 수 있다.위에서 아래로 이동하므로 DP[y][x]의 값은 한 칸 위 또는 왼쪽 위 대각선 한 칸 중 큰 값을 더하면 된다.따라서 식으로 나타내면 Arr[y][x] + DP[y-1][x-1], DP[y-1][x]이 된다. 코드#include #include #include using namespace std;int main() { ios::sync_with_stdio(false); cin.tie(NULL)..

문제 https://www.acmicpc.net/problem/5052 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net 문제풀이 프로그래머스 문제와 똑같은 문제이다. (https://school.programmers.co.kr/learn/courses/30/lessons/42577) 한 번호가 다른 번호의 접두어인 경우가 있는지를 구하는 문제이다. 긴 번호는 짧은 번호의 접두어가 될 수 없으므로 길이의 오름차순으로 정렬을 한다. 번호를 맨 왼쪽부터 오른쪽으로 가면서 번호를 합친다. 그리..

문제 https://www.acmicpc.net/problem/1449 1449번: 수리공 항승 첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나 www.acmicpc.net 문제풀이 테이프를 자르거나 겹쳐서 붙이는 것은 굳이 생각 안 해도 된다. 물을 막을 때, 그 위치의 좌우 0.5만큼 간격을 주면 1만큼의 테이프가 필요 없다고 생각하면 된다. 따라서 입력받은 테이프의 길이를 1 빼준다. 그다음 정렬을 해서 왼쪽부터 테이프를 붙인다. 테이프를 붙이게 되면 위치를 저장해 놓고 다음 구멍에 갔을 때, 이미 테이프가 붙여져 있는지 확인을 한다. 안 ..

문제 https://www.acmicpc.net/problem/6156 6156번: Cow Contest N (1 N >> M; vectordist(N + 1, vector(N + 1, INF)); for (int cow = 0; cow > cow1 >> cow2; dist[cow1][cow2] = 1; } for (int mid = 1; mid
문제 https://school.programmers.co.kr/learn/courses/20847/lessons/255902 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 규칙만 찾고 재귀로 풀면 할만하다. 처음 시작은 "Rr"로부터 시작한다. 부모가 "RR"인 경우는 자식은 모두 "RR"이다. 부모가 "Rr"인 경우는 자식은 "RR", "Rr", "Rr", "rr"이다. 부모가 "rr"인 경우는 자식은 모두 "rr"이다. [gen, idx]가 입력되면 gen이 2가 될 때까지 재귀를 돌린다. 부모를 찾아갈수록 idx는 4로 나눈다. 계속 재귀..

문제 https://www.acmicpc.net/problem/3020 3020번: 개똥벌레 개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 www.acmicpc.net 문제풀이 계속 시도해 보다가 안 돼서 누적합이라는 분류를 보고 풀었다. 석순과 종유석을 구분해서 1부터 N까지 홀수 부분은 홀수 벡터에, 짝수 부분은 짝수 벡터에 따로 저장한다. (인덱스는 길이) 위 그림(예제2)에서는 홀수 벡터는 {1, 1, 4, 1, 0}, 짝수 벡터는 {0, 2, 3, 2, 0}이 된다. 장애물의 높이가 2이면 높이가 1인 위치에서 닿으므로 누적합을 한다. 홀수 벡터는 높..

문제 https://www.acmicpc.net/problem/4948 4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 문제풀이 소수의 개수를 구하는 문제이다. 0을 입력받기 전까지 계속 입력을 받으므로 소수를 미리 구하는 것이 좋아 보인다. 따라서 에라토스테네스의 체를 이용해 입력의 최댓값 123456 * 2인값까지 중 소수를 구한다. vectorisPrime(246913, true); for (int idx = 2; idx