fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 32404 (C++) 일이 커졌어
최초 업로드: 2025-10-13 11:55:37
최근 수정 시간: 2025-10-13 11:55:37
게시자: rlatjwls3333
카테고리: 백준
조회수: 10
# [Gold V] 일이 커졌어 [문제 링크](https://www.acmicpc.net/problem/32404) ## 문제 설명 <p>정우는 정수 $1,2,\cdots ,N$을 원하는 순서로 나열해 순열 $p=[p_1,p_2,\cdots ,p_N]$을 만든 후, 이 순열을 이용해서 정우가 가지고 있는 정수 $X$를 키우려고 한다. $X$의 초깃값은 $1$이다.</p> <p>정우는 $i$를 $1$부터 $N$까지 $1$씩 증가시키며 $p_i$에 따라 정수 $X$를 키울 수 있는데, 그 방법은 다음과 같다.</p> <ul> <li>$i$가 홀수라면 $X$에 $p_i$를 곱한다.</li> <li>$i$가 짝수라면 $X$에 $p_i$를 더한다.</li> </ul> <p>예를 들어, $N=4$이고 순열 $p=[1,2,3,4]$일 때, $X$는 $1\times 1=1$, $1+2=3$, $3\times 3=9$, $9+4=13$으로 변한다.</p> <p>정수 $N$이 주어질 때, 정수 $1,2,\cdots ,N$을 어떻게 나열해야 정수 $X$를 최대로 키울 수 있는지 구해보자.</p> ## 입력 <p>정수 $N(1\le N\le 100)$이 주어진다.</p> ## 출력 <p>정수 $X$를 최대한 키울 수 있는 순열 $p=[p_1,p_2,\cdots ,p_N]$을 공백으로 구분하여 출력한다. 만약 $X$를 최대로 키우는 순열이 여러 개 존재한다면 아무 순열이나 하나 출력한다.</p> ## 풀이 * 똑같은 수를 더하는 것보다 곱하는 것이 수가 크거나 같아지기 때문에, 1 ~ n/2를 더하기에 배정, (n+1)/2 ~ n을 곱하기에 배정해야 한다. * 같은 더하기 값 중에서 똑같이 곱하면 큰수가 작은수보다 더 크기 때문에 더하기 부분은 내림차순으로 배치한다. * 곱하기 값 중에서 큰 수가 작은 수보다 더 많이 곱해져야 전체 값이 더 커지기 때문에 곱하기 부분은 오름차순으로 배치한다. ``` c++ #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for(int i=0;i<n;i++) { if(i%2==0) cout << n/2+1+i/2 << ' '; else cout << n/2-i/2 << ' '; } } ```