목록Baekjoon (177)
GitHubSeob

문제 https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 문제풀이 0인 좌표를 큐에 넣고 숫자를 넣었으면 큐에서 pop 하는 식으로 풀었는데 숫자가 안 채워지는 부분이 있어 틀렸다. 다른 블로그를 참고해서 풀었다. 문제풀이는 모든 경우의 수를 탐색하고, 숫자가 채워졌으면 다음 0인 칸으로 가서 다시 숫자를 채운다. 다음 칸에서 9까지 확인을 했는데 다른 부분과 겹쳐 채워질 수 없으면 다시 전 칸으로 돌아와 다른 숫자로 채운다. 이런 식으로 모든 경..

문제 https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 문제풀이 DFS가 아닌 비트마스크를 이용하여 문제를 풀었다. 글자를 모두 입력받고 정렬한다. 모든 경우의 수를 돌면서 해당 글자가 자음인지, 모음인지를 확인하고, 조건들을 만족했을 때 set인 answer에 insert 했다. 반복이 종료되면 set의 원소를 모두 출력한다. 코드 #include #include #include using namespace std; int main() { ios::..

문제 https://www.acmicpc.net/problem/5014 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 문제풀이 다른 문제가 더 있는지는 모르겠지만 큐에 집어넣기 전에 visit과 정답을 확인하냐 안 하냐에 따라서 메모리 초과가 갈렸다. BFS로 풀었고 큐를 pair로 선언하여 현재 위치, 버튼을 누른 횟수를 push 했다. visit벡터를 이용해서 두 번 다시 같은 층을 가지 않도록 했다. 평범한 BFS문제인 것 같다. 크게 신경 써야 할 건 없는 것 같다. 처음 시작층과 0을 큐에 집어넣고 큐가 빌 때..

문제 https://www.acmicpc.net/problem/3108 3108번: 로고 로고는 주로 교육용에 쓰이는 프로그래밍 언어이다. 로고의 가장 큰 특징은 거북이 로봇인데, 사용자는 이 거북이 로봇을 움직이는 명령을 입력해 화면에 도형을 그릴 수 있다. 거북이는 위치와 www.acmicpc.net 문제풀이 문제를 잘못 본 것도 있고 무작정 코드를 짜다가 길어지고 복잡해져서 다른 풀이를 참조하여 풀었다. 구현부를 크게 두 가지로 나눌 수 있다. 첫 번째는 좌표를 입력받아 2차원 벡터를 선언하고 해당 좌표에 표시하기, 두 번째는 DFS이다. 문제에서 전진, 회전 이런 건 무시하고 연필을 올리는 명령어인 PU명령어에만 집중하면 된다. 먼저 좌표는 -500부터 500까지 있으니 크기는 1000이다. 하지..

문제 https://www.acmicpc.net/problem/3184 3184번: 양 첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다. www.acmicpc.net 문제풀이 DFS로 풀었다. visit함수를 따로 만들지 않고 방문을 했으면 #표시를 했다. 울타리 안에서 상하좌우 어디로든 갈 수 있다. 전역 변수로 양 o, 늑대 v를 만들어서 메인 문에서 o과 v를 초기화하고 DFS함수를 실행한다. 메인 문에서 DFS는 #를 제외한., v, o일 때만 실행한다. 근처에 가지 않은 곳은 울타리밖에 없어 더 이상 갈 수 없을 때 메인 문으로 돌아..

문제 https://www.acmicpc.net/problem/2186 2186번: 문자판 첫째 줄에 N(1 ≤ N ≤ 100), M(1 ≤ M ≤ 100), K(1 ≤ K ≤ 5)가 주어진다. 다음 N개의 줄에는 M개의 알파벳 대문자가 주어지는데, 이는 N×M 크기의 문자판을 나타낸다. 다음 줄에는 1자 이상 80자 이하의 www.acmicpc.net 문제풀이 DFS로만 풀었는데 시간초과가 났다. 질문글+블로그를 보고 3차원 DP+DFS로 바꿔 풀었다. DP[y][x][word_cnt]로 두고 같은 글자수 일때 이미 저장된 값이 있다면 DFS를 하지않고 DP의 값을 이용한다. 방문하지 않은 곳은 -1, 방문을 하면 0으로 바꾸고 DFS를 하여 값을 저장한다. 대충 DP는 이런 느낌이다. 3차원이라 DP..

문제 https://www.acmicpc.net/problem/2251 2251번: 물통 각각 부피가 A, B, C(1≤A, B, C≤200) 리터인 세 개의 물통이 있다. 처음에는 앞의 두 물통은 비어 있고, 세 번째 물통은 가득(C 리터) 차 있다. 이제 어떤 물통에 들어있는 물을 다른 물통으로 쏟아 부 www.acmicpc.net 문제풀이 물을 옮기는 경우는 A->B, A->C B->A, B->C C->A, C->B 총 6가지가 있다. n번 물통에서 m번 물통으로 물을 옮긴다 가정하자. n번 물통이 빌 때까지 m번 물통으로 옮기는 경우와, m번 물통이 꽉 차 n번에서 더 이상 옮길 수 없는 경우가 있다. 이걸 식으로 나타내면 물통 M은 min(max_M, N+M), 물통 N은 N+M - min(ma..

문제 https://www.acmicpc.net/problem/1525 1525번: 퍼즐 세 줄에 걸쳐서 표에 채워져 있는 아홉 개의 수가 주어진다. 한 줄에 세 개의 수가 주어지며, 빈 칸은 0으로 나타낸다. www.acmicpc.net 문제풀이 3x3퍼즐을 1차원 배열로 나타내고, visit를 set로 만들었다. 퍼즐을 옮기고 해당 모양이 있는지 visit를 통해 확인을 하고, 없으면 visit에 해당 모양을 추가하고 큐에 push 했다. visit에 이미 있으면 다음으로 넘어간다. BFS를 통해 풀었고 단순하게 0의 위치에 따라 바꿀수 있는 경우를 모두 if, else if문을 써서 해결했다. void CanPush(queue& q, vectorpuzzle, int num1, int num2, in..

문제 https://www.acmicpc.net/problem/16496 16496번: 큰 수 만들기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 리스트에 포함된 수가 주어진다. 수는 공백으로 구분되어져 있고, 1,000,000,000보다 작거나 같은 음이 아닌 정수 이다. 0을 제외한 나 www.acmicpc.net 문제풀이 Compare함수를 만들어 조건대로 정렬하게 했다. 0을 제외한 나머지 수는 0으로 시작하지 않으며, 0이 주어지는 경우 0 하나가 주어진다. 라는 문장인데 0이 딱 한번만 주어진다는것으로 이해했다. 하지만 0이 여러개 주어질수도 있다.0이 여러개면 0만 출력하고 끝나야하지만 문제를 잘못 이해해 0의 개수만큼 0을 출력했었다.그걸 고치고 나니까 바로..