AtCoder Grand Contest 002 알고리즘 문제 풀이 및 코드 최적화 분석
A - Range Product
주어진 구간 [A, B]에 속한 모든 정수의 곱의 부호를 판별하는 문제입니다. 구간에 0이 포함되면 곱은 0이 됩니다. 모든 수가 양수라면 결과는 양수입니다. 모든 수가 음수라면 음수의 개수(B - A + 1)가 짝수일 때 양수, 홀수일 때 음수가 됩니다.
#include <iostream>
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.t ...
9월 9일 12:02에 게시됨
ARC 문제集中的 LIS 및 순열 복구 문제 풀이
CSP 제4회 모의고사 후기
이번 모의고사는 첫째 날 치러진 시험이었는데, 네 가지 사고력을 요구하는 문제가 등장했다. 각 문제의 풀이 과정을 정리해보았다.
문제 1: ARC125C - LIS를 원래 순열로 복구하기
주어진 수열에서 최장 증가 부분 수열(LIS)의 길이를 복원하여 사전식 순서가 가장 작은 원래 수열을 구하는 문제다. 핵심 아이디어는 그리디 알고리즘에 있다.
...
8월 30일 01:25에 게시됨
AtCoder Beginner Contest 386 문제 풀이
ABC386 문제 분석 및 풀이
A - Full House 2
주어진 네 개의 정수 A, B, C, D에 대해 추가로 하나의 정수 E를 선택하여 3+2 패턴을 만들 수 있는지 판단하는 문제입니다. 가능한 조합은 다음과 같습니다:
A = B, C = D, 그리고 B ≠ C인 경우
A = B = C, 그리고 C ≠ D인 경우
정렬 후 비교 로직을 통해 결과를 도출합니다. 아래는 구현 코드입니다:
// Problem: A - Full ...
8월 8일 11:53에 게시됨
AGC007 문제 풀이
A - Shik and Stone
시작점 \((1, 1)\)에서 경로를 시뮬레이션하며 이동하면 된다.
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 15;
string grid[MAX_N];
bool visited[MAX_N][MAX_N];
int main() {
int rows, cols;
cin >> rows >> cols;
string padding(cols + 2, '.');
grid[0] = grid[rows + 1] = pad ...
8월 6일 23:41에 게시됨
ABC356 대회 문제 해설 및 풀이 코드
A
주어진 범위 1부터 n까지의 수열에서 l부터 r까지의 부분만 뒤집어 출력하는 문제다.
즉, 1부터 l-1까지는 순서대로, l부터 r까지는 역순으로, r+1부터 n까지는 다시 순서대로 출력하면 된다.
#include <bits/stdc++.h>
using namespace std;
int n, L, R;
int main() {
cin >> n >> L >> R;
for (int i = 1; i < L; i++) cout & ...
7월 19일 20:14에 게시됨
AtCoder ABC393 풀이: A~F번 문제 해석
A - Poisonous Oyster
문제 요약
두 사람 A, B가 4가지 음식 중 일부를 먹는다. A는 1, 2번을, B는 1, 3번을 먹는다. 각자의 상태(fine/sick)가 주어질 때, 어떤 음식이 독이 있는지 판별하라.
풀이
조건에 따라 직접 분기하면 된다.
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr) ...
7월 5일 02:26에 게시됨
AtCoder ABC368 풀이: A~F번 문제 분석
A - Cut
문제 요약
길이 n인 수열에서 마지막 k개 원소를 앞으로 이동시킨 결과를 출력한다.
핵심 아이디어
배열을 회전시키는 기초적인 구현 문제이다. n-k 인덱스부터 끝까지의 원소를 먼저 출력한 뒤, 나머지 원소를 순서대로 출력하면 된다.
구현
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nu ...
6월 30일 23:02에 게시됨
AtCoder ABC321 풀이 노트
A - 321-like Checker (난이도 22)
주어진 숫자의 각 자리를 순차적으로 확인하여 이전 자리보다 현재 자리가 항상 작은지 검사합니다.
void solve() {
int n;
cin >> n;
int prev = -1;
while (n > 0) {
int cur = n % 10;
if (cur <= prev) {
cout << "No" << endl;
return;
} ...
6월 30일 17:51에 게시됨
하이쿠 조건을 만족하는 구간 존재 여부 판별 알고리즘
O(n log n) 이분 탐색 기법
누적 합 배열을 활용하여 각 시작 인덱스별로 X, Y, Z 합 구간의 종료 지점을 전처리합니다.
이진 탐색을 통해 정확히 X, Y, Z에 해당하는 부분 합의 끝 위치를 계산한 후,
연속된 세 구간이 조건을 만족하는지 O(n) 시간에 검증합니다.
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
...
6월 29일 02:27에 게시됨
ABC362 문제 해설
A 문제
문제는 매우 간단합니다. 세 정수 r, g, b와 문자열 c가 주어집니다. c가 "Red"이면 g와 b 중 최솟값을, "Blue"이면 r와 g 중 최솟값을, 그 외의 경우 r와 b 중 최솟값을 출력하면 됩니다.
코드 보기
#include<bits/stdc++.h>
using namespace std;
int main(){
int red, green, blue;
string color;
cin >> red > ...
6월 19일 01:43에 게시됨