목록Baekjoon/Silver (86)
GitHubSeob

문제 https://www.acmicpc.net/problem/2641 2641번: 다각형그리기 모눈종이에 다각형을 그리려고 한다. 그리는 방법은 모양수열로 표시된다. 모양수열은 1과 4사이의 숫자가 연속되어 나열된 것으로 1은 오른쪽으로, 2는 위쪽으로, 3은 왼쪽으로, 4는 아래쪽으로 www.acmicpc.net 문제풀이 구현문제이다. DFS로 풀었다. 모양수열의 길이는 최대 50이므로 100*100 크기의 2차원 배열을 선언하여 풀었다. 문제의 예시를 보면 모양을 회전 또는 뒤집어서는 안 되며, 주어진 모양과 같아야 한다. DFS함수로 2차원 배열에 입력받은 표본 모양수열의 값들대로 이동하면서 값을 true로 바꾼다. DFS함수가 종료되면 M번만큼의 표본 모양수열과 같은 길이의 모양수열의 값들을 입..

문제 https://www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 문제풀이 지원자 A가 합격하려면 나머지 모든 지원자의 성적과 비교했을 때, A의 서류성적 B의 서류 등수, A의 면접 등수 > B의 면접 등수만 아니면 된다. 처음에는 이중 반복문을 이용해서 풀었는데 시간초과가 나서 투 포인터 느낌으로 풀었다. 먼저 가장 ..
문제 https://www.acmicpc.net/problem/18917 18917번: 수열과 쿼리 38 3번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1, 4]이다. 6번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1, 4, 1]이다. 10번째 쿼리가 끝난 이후 배열의 상태는 [0, 3, 1]이다. www.acmicpc.net 문제풀이 문제에는 4가지 쿼리가 있다. 1은 추가, 2는 제거, 3, 4는 값을 출력하는 쿼리이다. 문제를 보면 배열의 몇 번째 값을 출력하거나 값이 어디에 있는지 등등 배열이 필요한 경우가 없다. 따라서 값을 더해주는 sum과 xor연산을 하는 XOR의 값만 구하면 된다. 쿼리 1은 sum에 x를 더하면 된다. XOR에 x를 xor연산하면 된다. 쿼리 2는 sum에서 ..

문제 https://www.acmicpc.net/problem/27165 27165번: 모든 곳을 안전하게 《백개먼》은 주사위 두 개를 던져서 나온 눈의 수만큼 말을 선택하여 정해진 방향으로 이동시키는 게임입니다. 말을 이동할 수 있다면 반드시 이동해야 하며, 두 주사위의 눈이 같다면 각 주사 www.acmicpc.net 문제풀이 0부터 N번까지의 N+1개의 칸이 있다. 0부터 N번까지의 칸에는 말들이 놓여있거나 놓여있지 않다. 말들이 모든 칸에 2개 이상 or 0개가 있을 경우 안전한 상태라 한다. 주어진 입력에서 안전한 상태가 될 수 있는지, 안전한 상태라면 어느 칸의 말을 옮겨야 하는지 출력하는 문제이다. 경우의 수를 나누어 문제를 풀었다. 입력을 받을 때 말의 칸이 1인 경우 1의 개수를 나타내는..

문제 https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 문제풀이 왼쪽 위를 1면, 오른쪽 위를 2면, 왼쪽 아래를 3면, 오른쪽 아래를 4면으로 둔다고 가정한다. 면을 계속 나누면서 해당 면의 최솟값을 더해 값을 구했다. N값을 입력받으면 시프트 연산을 통해 N을 2^N으로 바꾼다. 그다음 함수에서 N을 반으로 나누고 시작한다. (N을 가로 or 세로로 두어 y와 x의 위치를 비교하기 위함) 4면이 있기 때문에 네 가지 조건을 통해 어느..

문제 https://www.acmicpc.net/problem/21314 21314번: 민겸 수 민겸 수 하나가 주어진다. 민겸 수는 대문자 M과 K로만 이루어진 문자열이며, 길이는 3,000을 넘지 않는다. www.acmicpc.net 문제풀이 가장 큰 수는 K가 나올 때까지 기다렸다가 K가 나오면 M과 합치면 된다. K가 나오지 않은 채로 끝나면 남은 M들은 다 1로 바꿔야 가장 큰 수가 된다. 가장 작은 수는 K가 나오면 바로바로 5를 더한다. string largest(string num) { int idx(0), idx2(0), m_cnt(0); string answer(""); for (idx = 0; idx < num.size(); ++idx) { if (num[idx] == 'M') { +..

문제 https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 문제풀이 이런 문제는 B를 A로 만드는 과정을 탐색하는 게 더 쉬운 것 같다. B를 A로 만드는 과정 중 할 수 있는 것은 두 가지이다. B가 짝수 일 때 2로 나누는 것, B의 일의 자리숫자가 1일 때 1을 없애는 것. 이 이외의 경우는 B를 A로 만들 수 없는 경우이므로 -1을 출력하면 된다. 반복문을 돌려 B가 A가 될 때까지 반복을 한다. B를 10으로 나눈 나머지가 1이면 B를 10으로 나누고, B가 짝수이면 B를 2로 나눈다. B가 A보다 작게되면 만들 수 없으므로 -1을, 위의 두 가지 행동을 할 수 없..
문제 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 문제풀이 괄호의 개수는 주어지지 않고 특별한 조건이 없는 걸로 봐선 무한으로 쓸 수 있다. 값을 최소로 만들려면 뺄셈을 최대한 많이 하는 것이 좋다. 그리고 코드를 줄이기 위해 입력을 받고 마지막에 '+' or '-'를 추가로 더한다. 처음 문자와 마지막 문자는 숫자이므로 첫 숫자는 무조건 덧셈을 해야 한다. '-' 나오는 경우에 뒤에 '+'가 오면 앞의 '-'를 기준으로 묶어 둘 다 ..

문제 https://www.acmicpc.net/problem/20300 20300번: 서강근육맨 PT 첫째 날에 $1$과 $4$를 선택하고, 둘째 날에 $2$와 $3$을 선택하고, 마지막 날에 $5$를 선택하면 $M$은 $5$가 되며, 이때가 $M$이 최소일 때이다. www.acmicpc.net 문제풀이 몇 가지 경우만 생각해서 최댓값을 구하면 되나 싶었는데, 경우가 많은 거 같아서 다 탐색했다. 운동기구가 짝수면 정렬을 하고 맨 앞, 맨뒤 두 개를 선택하고 맨 앞은 그다음 맨 앞, 맨뒤는 그다음 맨뒤를 선택해 가면 된다. 운동기구가 홀수인 경우는 운동기구 하나는 반드시 남게 된다. 정렬을 하여 가장 무거운 운동기구를 하나 남기면 나머지는 짝수개가 된다. 짝수개와 마찬가지로 양쪽 끝 두 개를 선택해 가..