문제 풀이/AtCoder
-
[AtCoder - ABC116 B] Collatz Problem문제 풀이/AtCoder 2023. 3. 6. 12:24
난이도: 128 // -55 태그 더보기 Arithmetic 풀이 1. 무엇을 하면 될까? 더보기 문제에서 나온 대로, 입력받은 수에서 출발해서 함수를 계속 씌우다가, 어느 순간 본 적 있는 수가 나오면 그 때의 인덱스를 출력하면 됩니다. 물론 길어질 때를 대비해서, chk[x] = x가 나온 적이 있는가? 를 사용하는 것이 좋겠죠. 여담으로, 범위 내에서는 항상 ?, 1, 4, 2, 1, ...으로 반복되고, 이게 첫 반복이기 때문에 1의 위치 + 3을 해도 정답이 됩니다. 2. 조금 더 깊은 생각 더보기 '근데 이거 너무 커지지 않을까?' 하는 걱정이 생길 수도 있습니다. 다행히도, 문제 조건에서 1000000을 넘지 않는다고 친절히 제한을 걸었기 때문에 걱정 없이 구현하면 됩니다. 3. 코드 더보기..
-
[AtCoder - ABC101 A] Eating Symbols Easy문제 풀이/AtCoder 2023. 3. 6. 12:18
난이도: 38 // -545 태그 더보기 Arithmetic 풀이 1. 그래서 무엇을 하면 될까? 더보기 문자열 S를 입력받아서, 문제에서 나온 대로 '+'일 때마다 1을 더하고 '-'일 때마다 1을 뺴서 출력하면 됩니다. 2. 코드 더보기 1 2 3 4 5 void Main(){ string s; cin >> s; int ans = 0; for (char c : s){ ans += (c=='+' ? +1 : -1); } cout
-
[AtCoder - ABC212 G] Power Pair문제 풀이/AtCoder 2023. 3. 4. 22:26
난이도: 2150 태그 더보기 Number Theory Primitive Root Prime Factorizations, Divisors Fermat's Little Theorem Modular Multiplicative Inverse Greatest Common Divisor + Highly Composite Number Combinatorics 풀이 1. 소수 모듈러가 가지는 특징을 생각해보자. 더보기 소수 모듈러는 다양한 특징을 가지고 있습니다. 이 중에서 이번에 저희들이 사용할 건 아래와 같습니다. 모든 소수 \( P \)는 적어도 하나 이상의 원시근 \( G \)를 가진다. // 원시근이 뭔지 모르는 사람들을 위해: // 소수 \( P \)의 원시근은 \( G^1, G^2, G^3, \ldots..
-
[AtCoder - Panasonic2020 D] String Equivalence문제 풀이/AtCoder 2023. 3. 4. 20:51
난이도: 1102 태그 더보기 Backtracking 풀이 1. Normal Form 문자열이 가지는 특징은? 더보기 앞에서부터 1글자씩 읽어봅시다. 글자를 읽을 때마다, 아래 두 경우 중 하나가 나오게 됩니다. 이미 나온 글자인 경우 앞에서 나온 글자이므로, 앞에서 나왔던 그 글자와 동일해야 합니다. 이는, 여기의 글자를 다른 걸로 바꾼다면 앞의 글자를 건드리게 되기 때문에, 앞의 글자부터 읽는 상황일 때는 딱히 건드릴 수가 없죠. 새로 나온 글자인 경우 지금까지 나오지 않은 글자 중 가장 작은 글자여야 합니다. // 그렇지 않다면, 그 글자로 바꿔서 더 작은 문자열을 만들 수 있기 때문입니다. 즉, 앞에서부터 1글자씩 읽으면서 새로 나오는 글자가 순서대로 a, b, c, d, ...여야 합니다. 반대..
-
[AtCoder - ABC163 D] Sum of Large Numbers문제 풀이/AtCoder 2023. 3. 4. 20:25
난이도: 960 태그 더보기 Mathematics → Combinatorics 풀이 1. \( 10^{100} + m \)의 수들을 더할 때, 무언가 특징이 있지 않을까? 더보기 \( 10^{100} \)은 충분히 큰 수입니다. \( \frac{200\,000 \times 200\,001}{2} \approx 2 \times 10^{10} \)임을 감안하면 더더욱이요. 선택 방식을 약간 바꿔서 \( 0 \)부터 \( N \)까지 중에서 \( A_1, A_2, \ldots, A_K \)를 선택한 뒤 각각의 수에 \( 10^{100} \)을 더하고선 이의 합을 구한다면, \( \sum\limits_{k=1}^{K} 10^{100} + A_k = 10^{100}K + \sum\limits_{k=1}^{k} A..
-
[AtCoder - ARC101 C] Candles문제 풀이/AtCoder 2023. 3. 4. 20:06
난이도: 947 태그 더보기 Sliding Window 풀이 1. \( K \)개의 초가 결정되었을 때, 이를 최소한의 시간을 써서 켜는 방법은? 더보기 선택된 \( K \)개의 초 중, 맨 왼쪽에 있는 초 \( x_1 \)과 맨 오른쪽에 있는 초 \( x_K \)를 생각해봅시다. 이 두 초는 선택된 초이므로 반드시 켜야 합니다. 그런데, \( x_1 \)을 켜러 가는 길에서 + \( x_K \)를 켜러 가는 길에서 다른 초들 \( x_2, x_3, \ldots, x_{K-1} \)을 모두 만나게 되기 때문에, 실제로는 \( x_1 \)과 \( x_K \)만 고려하면 됩니다. 그럼 실제로는 얼마나 걸릴까요? 이는 두 초의 방향에 따라 달라집니다. 만약 \( x_1 \)과 \( x_K \)이 출발점을 기준..
-
[ARC142 A] Reverse and Minimize문제 풀이/AtCoder 2023. 3. 4. 19:51
난이도: 552 태그 더보기 Mathematics Reversal 풀이 1. 뒤집기 연산의 특징 더보기 문자열을 뒤집는다고 생각해봅시다. 그럼, 2번 뒤집으면 원래대로 돌아온다는 건 자명합니다. 그런데, 이번에는 수를 뒤집기 때문에, 그리고 그 뒤에 Leading Zero를 삭제하기 때문에 2번 뒤집는다고 항상 원래대로 돌아오진 않을 수 있습니다. 하지만, 조금 더 나아가볼까요? 어떤 수는, 그 초기 상태만으로도 Leading Zero가 존재하지 않습니다. 1번 뒤집으면, Leading Zero와 Trailing Zero가 존재하지 않습니다. // Trailing은 원래 Leading이 없었으니 존재하지 않고, Leading은 삭제되죠. 2번 뒤집어도, Leading Zero와 Trailing Zero가..
-
[AtCoder - ARC020 A] 石を滑らせるゲーム문제 풀이/AtCoder 2023. 3. 4. 14:44
난이도: 68 // -308, Experimental 번역 더보기 A. 돌을 미는 게임 Ant와 Bug가 일직선 모양의 얼음판에서 돌을 미는 게임을 하고 있습니다. 이 얼음판은 -1000 mm부터 1000 mm까지의 위치를 덮고 있습니다. 두 플레이어는 각각 1번씩, 돌을 얼음판 위에서 미끄러뜨립니다. 미끄러진 돌과 위치 0과의 거리가 더 짧은 사람이 승리합니다. 만약 두 플레이어의 거리가 동일하다면, 무승부입니다. Ant가 위치 A에 돌을 위치시켰고, Bug가 위치 B에 돌을 위치시켰을 때, 누가 승리했는지 출력하세요. 태그 더보기 Comparison 풀이 1. 특정 돌과 위치 0 사이의 거리는? 더보기 1차원에서, 두 점 사이의 거리는 \( |x_1 - x_2| \)입니다. 지금은 \( x_2 = 0..