• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

25번 문제 질문

23.01.04 22:16 작성 조회수 201

0

시간 제한도 없고 입력의 개수가 적어서 이중for문으로 작성하셨는데

 

문제를 풀다보니 이중 for문은 지양해야겠다는 생각이 들어 시간이 오래 걸리더라도 아래와 같이 짰습니다

코딩테스트 문제들은 제한 시간이 제시되고 그에 맞춰서 편하게 이중 for문으로 짜면 되는 것이죠?

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <vector>
//컴파일 f9 실행 f10 (dev c++)
using namespace std;



int main()
{
	
	int n = 0;

	cin >> n;

	vector<int> a(101);
	vector<int> b(n+1);
	int temp = 0;
	int rank = 1;
	
	for (int i = 1; i <= n; i++)
	{
		cin >> b[i];
		a[b[i]]++;

	}

	for (int i = 100; i >= 1; i--)
	{
		if (a[i] != 0)
		{
		
			temp = a[i];
			a[i] = rank;
			rank = rank + temp;
			
	
		}
	}

	for (int i = 1; i <= n; i++)
	{
		cout << a[b[i]]<< " ";
	}
	return 0;
}

답변 1

답변을 작성해보세요.

1

안녕하세요^^

N제한의 크기를 보고 O(n)으로 해야 할지, 아니면 O(n^2)으로 해도 될지 판단합니다. 대충 N제한이 100,000이상이면 효율성 테스트를 한다고 생각 하시면 좋겠습니다.