본문 바로가기

숨막히는 알고말고

(211)
[Baekjoon] ⚾️ 👀 문제 설명 문제 ⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종료되고, 두 팀이 공격과 수비를 서로 바꾼다. 두 팀은 경기가 시작하기 전까지 타순(타자가 타석에 서는 순서)을 정해야 하고, 경기 중에는 타순을 변경할 수 없다. 9번 타자까지 공을 쳤는데 3아웃이 발생하지 않은 상태면 이닝은 끝나지 않고, 1번 타자가 다시 타석에 선다. 타순은 이닝이 변경되어도 순서를 유지해야 한다. 예를 들어, 2이닝에 6번 타자가 마지막 타자였다면, 3이닝은 7번 타자부터 타석에 선다. 공격은 투수가 던진 공을 타석에 있는 타자가 치는 것이다. 공격 팀의 선수가 1루, 2..
[SWEA] 지그재그 숫자 👀 문제 설명 문제 로그인해야 문제를 볼 수 있다 ✍🏻풀이 DP를 사용해 1부터 10까지 조건에 맞게 값을 구한다. 짝수일 경우, dp[i] = dp[i - 1] - i이고, 홀수일 경우, dp[i] = dp[i - 1] + i이다. 이후 N값에 맞게 dp[N]을 출력해주면 된다. 코드 #include #include using namespace std; int dp[11]; int main() { ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int T; cin >> T; dp[1] = 1; for (int i = 1; i < 11; i++) { if (i % 2 == 0) { dp[i] = dp[i - 1] - i; } else { dp[i] = ..
[Baekjoon] 수 이어 쓰기 1 👀 문제 설명 문제 1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다. 1234567891011121314151617181920212223... 이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다. 출력 첫째 줄에 새로운 수의 자릿수를 출력한다. 예제 입력 1 120 예제 출력 1 252 ✍🏻풀이 처음에는 DP를 사용해서 풀려고 했으나, 메모리 초과가 났다. 그래서 자릿수를 사용해서 문제를 풀었다. 먼저, 입력받은 N의 자릿수를 구하고, (예제 입력 1을 예로 들면) N의 자릿수는 3이므로, for문을 사용해 2까지 돈다. 한 자릿수와 두 자릿수는 모두 붙인 길이에..
[Baekjoon] 단어 뒤집기 2 👀 문제 설명 문제 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 있다. 문자열의 시작과 끝은 공백이 아니다. ''가 문자열에 있는 경우 번갈아가면서 등장하며, '') { cout
[SWEA] N줄덧셈 👀 문제 설명 문제 로그인해야 문제를 볼 수 있다 ✍🏻풀이 DP를 사용해 각 숫자까지의 더한 값 dp배열에 저장해두고, 출력한다. 코드 #include #include using namespace std; int dp[10001]; int main() { ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int n; cin >> n; dp[1] = 1; for (int i = 2; i
[Baekjoon] 분산처리 👀 문제 설명 문제 재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다. 1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... , 10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ... 총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라. 입력 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 ..
[Baekjoon] 2×n 타일링 2 👀 문제 설명 문제 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. 입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 예제 입력 1 2 예제 출력 1 3 예제 입력 2 8 예제 출력 2 171 예제 입력 3 12 예제 출력 3 2731 ✍🏻풀이 이전에 푼 2 x N 타일링과 유사한 문제이다. 이 문제에선, 2*2 타일도 있으므로, dp[i - 1] + dp[i - 2] * 2를 해줘야 한다. 코드 #include #include #define MAX 1001 using namespace st..
[Baekjoon] 더하기 사이클 👀 문제 설명 문제 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다. 위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오..