목록Baekjoon/Gold (80)
GitHubSeob

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

문제 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/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/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 www.acmicpc.net 문제풀이 D는 2n , 단 10000이 넘으면 나머지 연산을 한다. S는 n-1, n이 0이라면 n-1=9999 L은 d1 d2 d3 d4 -> d2 d3 d4 d1 R은 d1 d2 d3 d4 -> d4 d1 d2 d3 주의할 점은 123 이면 L연산을 하면 1230, R연산을 하면 3012가 된다. 처음에는 string형으로 변환하고 swap 해서 바꾸고 그랬지만 시간이 오래 ..

문제 https://www.acmicpc.net/problem/1963 1963번: 소수 경로 소수를 유난히도 좋아하는 창영이는 게임 아이디 비밀번호를 4자리 ‘소수’로 정해놓았다. 어느 날 창영이는 친한 친구와 대화를 나누었는데: “이제 슬슬 비번 바꿀 때도 됐잖아” “응 지금 www.acmicpc.net 문제풀이 A에서 B로 숫자를 바꾸는 과정에서도 항상 소수를 유지해야 한다. 먼저 에라토스테네스의 체를 이용하여 소수를 구한다. prime벡터는 소수가 아니면 false를, 소수이면 true이다. 숫자를 바꿀 때 임시로 int형에서 string형으로 바꾸고 이중 반복문으로 모든 자리를 0부터 9까지 바꾼다. 바꾼 번호가 목표하는 번호와 같다면 cnt+1을 하여 출력해준다. 그렇지 않다면 다시 int형으..

문제 https://www.acmicpc.net/problem/1451 1451번: 직사각형으로 나누기 첫째 줄에 직사각형의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 직사각형에 들어가는 수가 가장 윗 줄부터 한 줄에 하나씩 M개의 수가 주어진다. N과 M은 100보다 작거나 같은 자연수이 www.acmicpc.net 문제풀이 첫 번째 직사각형, 두 번째 직사각형이 될 수 있는 모든 경우를 구한다. 세 번째 직사각형은 첫 번째, 두 번째 직사각형을 만들 때 사용하지 않은 칸으로 만든다. Div1은 첫 번째 직사각형, Div2는 두 번째 직사각형, Div3은 세 번째 직사각형을 만드는 함수이다. 먼저 첫 번째 직사각형을 만든다. 이중 for문을 돌려 y는 0부터 N까지, x는 0부터 M까지 돌..

문제 https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 문제풀이 시작 채널은 100이기 때문에 + or - 버튼을 일일이 누른 횟수를 answer에 저장한다. N길이를 구하고, N-1 길이의 첫수부터 N+1 길이의 마지막 수까지 돌면서 해당수를 판별한다. N의 최댓값은 500,000 이므로 최대로 돌려봐야 하는 수는 N+1 길이의 끝수이거나 1,000,000이다. 먼저 길이를 구하고, N번호까지 리모컨을 누르는 횟수가 answer..

문제 https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 문제풀이 음수, 0, 양수를 나눠서 생각해야 하는 문제이다. 먼저 숫자들이 있으면 절댓값이 가장 큰 숫자들끼리 곱하여 더하는 것이 가장 큰 값을 구하는 과정이다. 따라서 음수는 오름차순으로 정렬하여 두 수를 곱하고 합 변수 sum에 더한다. 음수 한 개와 0이 남은 경우는 곱하여 0으로 만드는 것이 더 큰 값이므로 음수와 0은 모두 음수를 저장하는 우선순위큐에 입력한다. 양수도 비슷하게 하..

문제 https://www.acmicpc.net/problem/2448 2448번: 별 찍기 - 11 첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수) www.acmicpc.net 문제풀이 N=3일 때 모양이다. N이 몇이든 이 모양이 기본이 되는 문제이다. Nx(N*2-1) 행렬이다. N=3일 때 y=0, x=3-1인 부분이 기준점이 되므로 [y][x] = *, [y+1][x-1], [y+1][x+1] = *, [y+1][x-2] ~ [y+1][x+2] = *이라는 기본 형태를 잡아준다. N=6일 때 모양이다. Nx(N*2-1) 행렬이다. 기준점이 (0, N-1)이고, 또 다른 점은 (0+3, N-4), (0+3, N+..