목록알고리즘/백준 (341)
어흥
문제 링크: https://www.acmicpc.net/problem/3678 3678번: 카탄의 개척자 문제 "카탄의 개척자"는 많은 사람들이 즐기는 보드게임이다. 게임을 시작하려면, 먼저 게임판을 랜덤으로 만들어야 한다. 게임판은 육각형 타일로 이루어져 있으며, 각 타일은 자원을 하나씩 포함하고 있다. 자원은 총 다섯 가지 종류가 있으며, 점토, 재목, 양모, 곡물, 광석이다. 각 자원은 1부터 5까지 순서로 나타낼 수 있다. 랜덤을 이용해서 게임판을 만들면, 같은 자원이 인접한 타일에 있는 경우가 있을 수도 있다. 이런 배치를 매우 싫어하는 사람이 많다 www.acmicpc.net 1. 주의할 점 - 6각형 형태를 어떻게 나타낼 것인가 이 부분에 관해서는 백준의 '주사위 윷놀이' 문제와 비슷하다. ..
문제 링크: https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1≤N≤26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 영문자 대문자로 매겨지며, 항상 A가 루트 노드가 된다. 자식 노드가 없는 경우에는 .으로 표현된다. www.acmicpc.net 1. 주의할 점 - Node 구조체를 만들 줄 알아야한다. 2. 구현 - Node 구조체를 만든 이후 Nodes 배열을 생성한다. - 각 Node를 생성해준다 - 입력받은 순서에 따라 Node를 연결해준다 #include using namespace std; struct node { n..
문제 링크: https://www.acmicpc.net/problem/2573 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 나타내는 M개의 정수가 한 개의 빈 칸을 사이에 두고 주어진다. 각 칸에 들어가는 값은 0 이상 10 이하이다. 배열에서 빙산이 차지하는 칸의 개수, 즉, 1 이상의 정수가 들어가는 칸의 개수는 10,000 개 이하이다. 배열의 첫 번째 행과 열, 마지 www.acmicpc.net 1. 주의할 점 - 반복문을 언제 끝내야 하는지 확실히 한다 - 불필요한 부분을 큐, 벡터에 넣지 않는다 2. 구현 - 배열을 ..
문제 링크: https://www.acmicpc.net/problem/7348 7348번: 테이블 옮기기 문제 ACM 회사는 아래 그림과 같은 빌딩의 한 층을 빌렸다. 이 층의 방들은 다음과 같이 번호가 매겨져 있다. 그림처럼 이 층에는 복도를 따라 양쪽 사이드로 각각 200개의 방이 있다. ACM 회사는 이 방들을 리모델링하려는 계획을 세웠다. 당연히 어떤 방에서 다른 방으로 많은 테이블을 옮겨야 한다. 이때 복도는 좁고 테이블이 커서 단지 하나의 테이블만 이 복도를 지날 수 있다. 방에서 다른 방으로 테이블을 옮기는 데 소요되는 시간은 10분 이다. i www.acmicpc.net 1. 주의할 점 - 처음에 입력받는 숫자가 두번째 숫자보다 클 수도 있다 - 서로 마주보는 숫자는 공통된 통로를 지닌다 ..
[팰린드롬] 문제 링크: https://www.acmicpc.net/problem/2079 2079번: 팰린드롬 문제 팰린드롬(palindrome)이란 앞에서부터 읽으나 뒤에서부터 읽으나 같은 단어를 말한다. 'aba'나 'a'와 같은 단어는 팰린드롬이며, 'abaccbcb'나 'anavolimilana'와 같은 단어는 팰린드롬이 아니다. 만일 어떤 단어가 팰린드롬이 아니라면, 그 단어는 여러 개의 팰린드롬으로 나누어질 수 있을 것이다. 단어가 주어졌을 때 이를 여러 개의 팰린드롬으로 나누되, 나누어진 팰린드롬의 개수가 최소가 되도록 나누려고 한다. 예를 들어 ab www.acmicpc.net [팰린드롬 분할]문제 링크: https://www.acmicpc.net/problem/1509 1509번: 팰린..
문제 링크: https://www.acmicpc.net/problem/1167 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2≤V≤100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. (정점 번호는 1부터 V까지 매겨져 있다고 생각한다) 먼저 정점 번호가 주어지고, 이어서 연결된 간선의 정보를 의미하는 정수가 두 개씩 주어지는데, 하나는 정점번호, 다른 하나는 그 정점까지의 거리이다. 예를 들어 네 번째 줄의 경우 정점 3은 정점 1과 거리가 2인 간선으로 연결되 www.acmicpc.net 1. 주의할 점 - 모든 Node에 대해 돌릴 경우 N^2 -> 시간초과 발생 - 시작 Node를 기준으로 Leaf 까지..
문제 링크: https://www.acmicpc.net/problem/14405 14405번: 피카츄 피카츄는 "pi", "ka", "chu"를 발음할 수 있다. 따라서, 피카츄는 이 세 음절을 합친 단어만 발음할 수 있다. 예를 들면, "pikapi"와 "pikachu"가 있다. 문자열 S가 주어졌을 때, 피카츄가 발음할 수 있는 문자열인지 아닌지 구하는 프로그램을 작성하시오. www.acmicpc.net 1. 주의할 점 - 3가지 단어 말고 다른 문자로 시작해도 NO 출력시켜야한다. 2. 구현 - Idx=0을 기준으로 입력받은 String에서 Idx번째 문자가 셋중 하나와 같으면 나머지 또한 같은지 비교한다. - 셋과 모두 다르다면 While문을 빠져오도록 설계한다. #include #include ..
문제 링크: https://www.acmicpc.net/problem/2151 2151번: 거울 설치 첫째 줄에 집의 크기 N (2 ≤ N ≤ 50)이 주어진다. 다음 N개의 줄에는 N개의 문자로 집에 대한 정보가 주어진다. ‘#’는 문이 설치된 곳으로 항상 두 곳이며, ‘.’은 아무 것도 없는 것으로 빛은 이 곳을 통과한다. ‘!’은 거울을 설치할 수 있는 위치를 나타내고, ‘*’은 빛이 통과할 수 없는 벽을 나타낸다. www.acmicpc.net 1. 주의할 점 - BFS로 풀지만 어느 방향에서 왔는지 기억하지 않으면 답을 도출할 수 없다. - 시작점을 기준으로 반대지점까지 도착하도록 설계하면 된다 - 거울을 놓을 수 있지만 놓지 않는 경우도 처리해야한다. 2. 구현 - 한 방향에서 시작해서 끝까지 ..