fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 34622 (C++) 제식 훈련 1
최초 업로드: 2025-10-23 22:38:49
최근 수정 시간: 2025-10-23 22:38:49
게시자: rlatjwls3333
카테고리: 백준
조회수: 14
# [Gold I] 제식 훈련 1 [문제 링크](https://www.acmicpc.net/problem/34622) ## 문제 설명 <p>$N \times M$ 명의 훈련병들이 제식 훈련을 위해 연병장에서 $N$열 $M$오로 정렬해 서 있다. 이때 인접한 훈련병 간의 거리는 $d$이고, $i$열 $j$오에 서 있는 훈련병의 위치는 2차원 좌표평면 상에서 $(d(i-1), d(j-1))$이다.</p> <p>훈육 교관 하늘이는 훈련병들에게 다음과 같은 지시를 내릴 수 있다.</p> <ul> <li>$i$열 $j$오 훈련병 기준, 개인 간격 $k$ 간격, 좌우로 나란히!</li> </ul> <p>여기서 $i, j, k$는 모두 양의 정수이며, $1 \leq i \leq N, 1 \leq j \leq M, 1 \leq k \leq 10^9$을 만족해야 한다.</p> <p>훈련병들은 이 지시를 받으면 대열을 유지한 상태로 인접한 훈련병 간의 거리를 $k$로 만든다. 이때 지시의 기준이 된 $i$열 $j$오 훈련병의 위치는 변하지 않는다.</p> <p>하늘이의 목표는 $3$번 이하의 지시를 통해, 처음 $(0,0)$에 있던 $1$열 $1$오 훈련병의 위치를 $(x,y)$로 옮기고 인접한 훈련병 간의 간격을 $e$로 만드는 것이다.</p> ## 입력 <p>첫째 줄에 정수 $N, M, d, e, x, y$가 공백을 사이에 두고 주어진다. ($2 \leq N, M \leq 10^4, 1 \leq d, e \leq 10^4, -10^4 \leq x, y \leq 10^4$)</p> ## 출력 <p>첫째 줄에 하늘이가 내릴 지시의 개수 $k$ ($0 \leq k \leq 3$)를 출력한다.</p> <p>이어서 $k$개의 줄에 각 지시를 출력한다. 각 지시는 세 정수 $i, j, k$로 나타내며, 공백을 사이에 두고 출력한다. ($1 \leq i \leq n, 1 \leq j \leq m, 1 \leq k \leq 10^9$) 이는 다음과 같은 지시를 의미한다.</p> <ul> <li>$i$열 $j$오 훈련병 기준, 개인 간격 $k$ 간격, 좌우로 나란히!</li> </ul> <p>$k$번째 지시 후에는 $1$열 $1$오 훈련병의 위치가 $(x,y)$이어야 하며, 인접한 훈련병 간의 간격은 $e$이어야 한다.</p> <p>만약 $3$번의 지시 안에 목표를 달성하는 것이 불가능하다면 첫째 줄에 $-1$을 출력한다.</p> ## 풀이 x<0 && y<0, x<0 && y>=0, x>=0 && y<0, x>=0 && y>=0 네 가지 케이스에 대해 (1, 1), (2, 1), (1, 2) 세 점에서 거리를 늘리고 좁히고 하면 되는 문제입니다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m, d, e, x, y; cin >> n >> m >> d >> e >> x >> y; cout << "3\n"; if(x>=0 && y>=0) { cout << "1 1 " << x+y+e << '\n'; cout << "2 1 " << y+e << '\n'; cout << "1 2 " << e; } else if(x<0 && y<0) { cout << "2 1 " << d-x << '\n'; cout << "1 2 " << d-x-y << '\n'; cout << "1 1 " << e; } else if(x<0) { cout << "2 1 " << d-x << '\n'; cout << "1 1 " << y+e << '\n'; cout << "1 2 " << e; } else { cout << "1 2 " << d-y << '\n'; cout << "1 1 " << x+e << '\n'; cout << "2 1 " << e; } } ```