본문 바로가기

Algorithms

(42)
[알고개념] 알고리즘 개념 목차 (이 게시판에는 2022년 3~4월간 알고리즘 초급, 중급 스터디에서 공부한 내용을 업로드할 예정입니다.) 초급 알고리즘 목차 Brute-Force Greedy DP (Dynamic Programming) Math Data Structure Back Tracking DFS & BFS 고급 알고리즘 목차 Segment Tree LCA (Lowest Common Ancester) SCC (Strongly Connected Component) kmp Lazy Propagation 2-SAT Network Flow - Dinic Algorithm Bipartite Matching
[PS] 백준 #14496. 그대, 그머가 되어 문제 정보 난이도: 실버 I 문제 주소: https://www.acmicpc.net/problem/14496 이 문제를 푼 이유: 그룹 연습 Div.2 문제 선린에 합격한 대호에게는 큰 고민이 있다. 대호는 중학교 3년 내내 공부만 했기 때문에, 요즘 학생들이 사용하는 ‘야민정음’에 대해서는 문외한이다. 친구들의 대화에 끼고 싶은 대호는 야민정음을 공부하기로 했다. 야민정음이란, 비슷한 모양의 글자를 원래 문자 대신에 사용하는 것을 일컫는다. 예를 들어, ‘그대’는 ‘그머’로, ‘팔도비빔면’은 ‘괄도네넴댼’으로, ‘식용유’는 ‘식용윾’으로, ‘대호’는 ‘머호’로 바꿀 수 있다. 아무 문자나 치환할 수 있는 건 아니며 치환이 가능한 몇 개의 문자들이 정해져있다. 예를 들어보자. (a, b), (a, c),..
[PS] 백준 #9417. 최대 GCD 문제 정보 난이도: 실버 IV 문제 주소: https://www.acmicpc.net/problem/9417 이 문제를 푼 이유: 그룹 연습 Div.2 문제 정수 M개가 주어졌을 때, 모든 두 수의 쌍 중에서 가장 큰 최대공약수 찾는 프로그램을 작성하시오. 나의 풀이 이 문제는 보자마자 브루트포스로 모든 쌍에 대해서 유클리드 호제법을 적용하여 최대 공약수를 구한 뒤 그 중 최대값을 구하면 되겠다고 생각했다. (최대 정수의 개수가 100이므로 4500쌍이 최대기 때문에 모든 경우의 수를 구해도 된다.) 하지만 이 문제에서 예상치 못하게 시간을 많이 낭비했는데, 그 이유는 입력받는 형태 때문이였다. 3 10 20 30 40 7 5 12 125 15 25 위와 같이 입력값의 개수가 주어지지 않고 개행문자를 입..
[PS] 백준 #2012. 등수 매기기 문제 정보 난이도: 실버 III 문제 주소: https://www.acmicpc.net/problem/2012 이 문제를 푼 이유: 그룹 연습 Div.2 문제 2007년 KOI에 N명의 학생들이 참가하였다. 경시일 전날인 예비소집일에, 모든 학생들은 자신이 N명 중에서 몇 등을 할 것인지 예상 등수를 적어서 제출하도록 하였다. KOI 담당조교로 참가한 김진영 조교는 실수로 모든 학생의 프로그램을 날려 버렸다. 1등부터 N등까지 동석차 없이 등수를 매겨야 하는 김 조교는, 어쩔 수 없이 각 사람이 제출한 예상 등수를 바탕으로 임의로 등수를 매기기로 했다. 자신의 등수를 A등으로 예상하였는데 실제 등수가 B등이 될 경우, 이 사람의 불만도는 A와 B의 차이 (|A - B|)로 수치화할 수 있다. 당신은 N명..
[PS] 백준 #21313. 문어 문제 정보 난이도: 브론즈 II 문제 주소: https://www.acmicpc.net/problem/21313 이 문제를 푼 이유: 그룹 연습 Div. 2 문제 문어에게 여덟개의 팔이 있다는 사실은 잘 알려져 있다. 하지만 문어들이 자신의 팔들을 1번, 2번, 3번, ..., 8번이라고 부른다는 말은 오늘 처음 들었을 것이다! 단, 시계방향으로 오름차순이라던가 하는 규칙은 없다. (물론 그러한 문어도 존재할 수 있다.) 문제에선 편의상 팔 대신 손이라고 부르자. 문어들은 정월 대보름을 맞아 강강술래를 하려고 한다. 각 문어는 양 옆의 서로 다른 두 문어와 손을 맞잡아 원을 만든다. 문어끼리 손을 잡을 때 지켜야 할 예절이 있다. 서로 같은 번호의 손을 잡아야 한다. 한 문어와 둘 이상의 손을 잡을 수 ..
[PS] 백준 #21968. 선린의 터를 문제 정보 난이도: 실버 IV 문제 주소: https://www.acmicpc.net/problem/21968 이 문제를 푼 이유: 그룹 연습 Div.2 문제 드높은 남산 위에 우뚝 선 (중략) 세워라 반석 위에 선린의 터를 1899년, 여러분들은 대한제국 고종 황제의 칙령을 받아 한국 최초의 실업교육기관인 관립상공학교를 세울 터를 선택해야 한다. 대한제국에서 학교를 지을만한 터는 여러 개 있는데, 각 터는 서로 다른 자연수를 번호로 갖고 있다. 특히, 선린의 터의 번호는 $3^k$꼴의 자연수가 최대 한 번씩 더해진 자연수이다(단, $k \ge 0$). 즉, 선린의 터의 번호는 $1(=3^0), 3(=3^1), 9(=3^2), 27(=3^3), 81(=3^4), 90(=3^2+3^4), 91(=3^0+3..
[PS] 백준 #21966. (중략) 문제 정보 난이도: 실버 V 문제 주소: https://www.acmicpc.net/problem/21966 이 문제를 푼 이유: 그룹 연습 Div.2 문제 드높은 남산 위에 우뚝 선 (중략) 세워라 반석 위에 선린의 터를 1개 이상의 문장들이 주어진다. 아래 규칙에 따라 문장들의 중간 부분을 적당히 생략해 25글자 이내로 요약해서 출력하는 프로그램을 작성하자. 단, 입출력의 편의를 위해 문장들을 공백 없이 모두 붙여 구성한 문자열 S$S$가 대신 주어진다. 문자열의 첫 글자부터 가장 먼저 만나는 '.'(마침표)까지, 그리고 각 '.'의 다음 글자부터 가장 먼저 만나는 '.'까지를 한 문장으로 생각하기로 하자. 예를 들어 주어진 문자열 $S$가 'IamInevitable.IamIronMan.'이라면 'I..
[종만북] 6장. 완전 탐색 (2) PICNIC 문제 바로가기: https://www.algospot.com/judge/problem/read/PICNIC 1. 중복된 답 아래 코드의 문제점은 중복된 답을 세는 경우를 처리하지 않은 점이다. 중복이 된 원인은 (0, 1)과 (1, 0)을 각각 다른 경우로 봤고 다른 순서로 학생들을 짝지어 주는 것도 서로 다르다고 카운트했기 때문이다. #include using namespace std; int n; bool graph[10][10]; // 최대 10 int countPairings(bool taken[10]) { // taken[i]: i번 학생이 짝을 찾은 경우 true // Base case: 전부 짝이 생기면 종료 bool finished = true; for (int i = 0; i < n; i..