[백준/BOJ] 1898. 이전 수열은 어떤 수열일까 [Gold 2]

jychan99·2022년 6월 22일
0
post-thumbnail
  1. 이전 수열은 어떤 수열일까?

문제출처 : https://www.acmicpc.net/problem/1898

code

#include <iostream>
using namespace std;

int S[50001];
int index[50001] = { 0, };
int result[50001];
int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> S[i];

	for (int i = 1; i <= n; i++)
	{
		//첫번째자리일떄
		if (S[i] == 1)
		{
			if (index[1] == 0)
			{
				index[1] = 1;
				result[i] = 1;
			}
			else
			{
				result[i] = 2;
			}
		}
		else if(S[i]==n)//마지막자리일떄
		{
			if (index[n - 1] == 0)
			{
				index[n - 1] = n;
				index[n] = 1;
				result[i] = n - 1;
			}
			else if(index[n-1]!=0 && index[n]==0)
			{
				index[n] = n;
				result[i] = n;
			}
			else
			{
				result[i] = n - 1;
			}
		}
		else//중간에있는 자리일떄
		{
			if (index[S[i]] != 0)
			{
				result[i] = index[S[i]];
			}
			else if (index[S[i] - 1] == 0)
			{
				index[S[i] - 1] = S[i];
				index[S[i]] = 1;
				result[i] = S[i] - 1;
			}
			else
			{
				index[S[i]] = S[i];
				result[i] = S[i];
			}
		}
	}
	for (int i = 1; i <= n; i++)
		cout << result[i] << '\n';

	return 0;
}

기나긴 시험기간이 끝나고 종강이후 처음푸는 백준이다.
그동안 하도안풀었더니 머리가 굳어서 시간이좀 많이걸렸다 ㅠㅠ

핵심은 조건에 맞는 오름차순을 지켜야 한다는 것이다.
조건중에 인접한 숫자의 차이가 1이하 라는 조건에 의해서 짝이 지어지는 숫자들이 있는데,
예제에서 8과7, 5와4, 3과2가 짝이 지어지고,
1 6은 자기자신과 짝이 지어지게 된다.
이 경우의수를 각각나눠서 조건문으로 풀어주면 된다.

profile
내가 지금 두려워 하고 있는 일이 바로 내가 지금 해야 할 일이다. 🐥

0개의 댓글