BOJ-3190, 뱀 문제 📑 https://www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 문제 정리 ▾ 보드의 크기는 N*N으로 N에 대한 입력을 받는다. 초기 뱀의 길이는 1이며, 뱀의 머리는 오른쪽을 향한다. 뱀은 1초에 1칸씩 움직이며 아래의 규칙이 적용된다. 뱀의 방향 전환으로는 D는 오른쪽으로 90도 회전, L은 왼쪽으로 90도 회전이다. 더보기 먼저 뱀은 몸 길이를 늘려 머리를 다음 칸에 위치시킨다. 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사..
BOJ-3085, 사탕 게임 문제 📑 https://www.acmicpc.net/problem/3085 3085번: 사탕 게임 예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다. www.acmicpc.net 문제 정리 ▾ 보드의 크기(N)을 입력 받는다. 각 행엔 C(빨간색), P(파란색), Z(초록색), Y(노란색)으로 된 문자열을 개행 입력 받는다. 보드에서 한 가지 사탕만을 최대로 먹기 위해 인접한 칸의 다른 사탕과 바꾸려고 한다. 이때 최대로 먹을 수 있는 사탕의 개수를 출력한다. 접근 🚶🏻 나의 생각 ▾ N의 최대 크기는 50으로 모든 경우를 따져볼 때 최대로 따지는 경우의 수는 50*50으로 브루트포스로 접근해도 무방할 거 같아 브루트포스로 구현해야겠다고 생각했다. 해당..
BOJ-1744, 수 묶기 문제 📑 https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 문제 정리 ▾ 수들의 개수를 입력받는다. 수들은 각각 개행으로 입력받는다. 각각의 수들을 둘씩 묶거나, 아니면 묶지 않아야 한다. 위 연산을 통해 입력받은 수들로 최댓값을 출력시킨다. 접근 🚶🏻 나의 생각 ▾ 이 문제는 케이스를 나누는 것이 중요하다고 생각했다. 케이스는 아래와 같이 나눌 수 있다. 양수일 때 (N > 1) 1일 때 음수일 때 (0 포함) 내 ..
BOJ-16953, A→B 문제 📑 https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 문제 정리 ▾ A, B를 입력받는다. 두 연산을 이용해 A를 B로 만드는데 필요한 연산의 최솟값을 구하면 된다. A가 B가 되기 위한 연산은 아래와 같다. 2를 곱한다. 1을 수의 가장 오른쪽에 추가한다. 접근 🚶🏻 나의 생각 ▾ 백트래킹으로 B를 A로 만드는 횟수를 카운팅 하려고 했다. 내 코드(시간 초과 코드) ▾ import Foundation func solution() { let tc = readLine()!.split(separator: " ").map{ Int(String(..
BOJ-1946, 신입 사원 문제 📑 https://www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 문제 정리 ▾ 테스트 케이스의 개수를 입력받는다. 지원자의 수를 입력받는다. 지원자는 서류심사 성적과 면접 성적의 순위를 각각 공백 기준으로 입력받는다. 다른 지원자들의 서류심사 성적과 면접 성적을 비교하여 다른 지원자들에 비해 두 성적 모두 낮을 경우 떨어진다. 해당 회사에 선발할 수 있는 신입사원의 최대 인원수를 출력한다. 접근 🚶🏻 ..
BOJ-1026, 보물 문제 📑 https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 문제 정리 ▾ A,B의 길이를 정할 N의 정수를 입력 받는다. A와 B의 원소를 각각 곱해서 누적시킨 S를 출력시킨다. 단, S는 모든 케이스 중 최솟값으로 출력을 시켜야한다. A는 최솟값과 B는 최댓값을 곱하면 된다. B의 배열은 재정렬이 되어선 안된다. 접근 🚶🏻 나의 생각 ▾ 처음에 문제를 끝까지 안읽고 쉽다는 생각에 A와 B 배열 모두 재정렬하여 계산..
BOJ-11726, 2xn 타일링 문제 📑 https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 문제 정리 ▾ 크기가 2 * n의 직사각형을 위한 n의 정수 입력을 받는다. 입력받은 크기를 2*1 && 2*2 크기의 타일로 만들 수 있는 방법의 수를 10,007로 나눈 나머지를 출력한다. 접근 🚶🏻 나의 생각 ▾ 노트에 하나하나 케이스를 그려보면서 규칙을 찾아보았다. DP 문제이기 때문에 규칙만 찾으면 구현하는 건 어려움이 없다고 생각했다. 노트에 적어보며 찾은 규칙은 ..
BOJ-17298, 오큰수 문제 📑 https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 문제 정리 ▾ 수열의 개수를 입력받는다. 수열은 현재 인덱스 값보다 오른쪽 인덱스 값이 크면 현재 인덱스 값은 오른쪽 인덱스 값으로 변경시킨다. 오른쪽에 더 큰 수가 없을 경우 -1을 현재 인덱스 값으로 변경시켜준다. 접근 🚶🏻 나의 생각 ▾ 문제를 보자마자 이중 for문으로 현재 값보다 다음 인덱스 값이 크면 변경을 해주려고 했다. 문제는!! 더 큰 수가 없을 경우, -..
BOJ-10799, 쇠막대기 문제 📑 https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 문제 정리 ▾ 괄호로 된 문자열을 입력받는다. 연이어 나오는 괄호 한 쌍은"()" 레이저를 의미한다. 괄호가 연이어 나오지 않는 경우 쇠막대기로 간주하고, 쇠막대기 사이에 있는 레이저로 쇠막대기를 절단할 때, 절단된 쇠막대기의 총개수를 출력하면 된다. 접근 🚶🏻 나의 생각 ▾ 문제를 바로 이해했지만 도저히 어떻게 풀어야 할지 감이 안 잡혔다. "("가 나올 때 그다음에도..
BOJ-17413, 단어 뒤집기 2 문제 📑 https://www.acmicpc.net/problem/17413 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 문제 정리 ▾ 문자열을 입력받는다. 저번 단어 뒤집기 문제와 유사하지만 "" 특수 문자 안에는 문자열이 그대로 존재(역순 x)해야 한다. 특수 문자로 둘러싸지 않은 문자열은 뒤집어 출력이 되어야 한다. 접근 🚶🏻 나의 생각 ▾ 저번 단어 뒤집기 문제와 유사하기 때문에 특수문자 처리만 잘해주면 된다고 생각했다. 가장 중요했..
BOJ-10845, 큐 문제 📑 https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 정리 ▾ 저번 스택(10828) 문제와 정말 비슷한 유형이었다. 명령어의 개수를 입력받고, 각각의 명령어에 맞는 기능을 구현해주면 된다. push: 정수 x를 큐에 넣는 연산 pop: 큐에 가장 앞에 있는 정수를 빼고, 그 수를 출력 but! 큐가 비어있으면 "-1" 출력 size: 큐에 사이즈 출력 empty: 큐가 비어있으면 "1", 아니면..
BOJ-1406, 에디터 문제 📑 https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 문제 정리 ▾ 문장을 입력 받고, 명령어의 개수도 개행으로 입력받는다. 각각의 명령어들이 입력이 되고, 그 명령어의 맞게 출력을 해주면 된다. 접근 🚶🏻 나의 생각 ▾ 처음 문제를 봤을 때 커서를 인덱스로 다루고, 인덱스를 이용해 명령어들을 실행시키려고 했다. 예상외로 인덱스를 이용하는데 여러 문제들이 있어서 다른 String객체(Rstr)를 만들어 왼쪽으로 이동할..