[알고리즘]/CodeUp

[CodeUp/C++] 1084번 빛 섞어 색 만들기

우당탕탕 개발 일지 2024. 7. 8. 22:32

안녕하세요. 우당탕탕 개발일지입니다.  외부 활동에서 코딩테스트를 보는 곳이 있어 준비를 시작하게 되었습니다. 처음 풀어 보는 거라 CodeUp에 기초 100제를 먼저 풀고 있습니다. 꾸준하게 매일매일 푸는 걸 목표로 하고 있습니다!

 

 

시간초과!

시간초과!!

시간초과!!!

 

이번문제는 시간초과로 계속 헤매다가 풀리자마자 블로그 쓰려고 달려왔습니다.

으악 너무 화났습니다.

 


문제 1084번

빨강(red), 초록(green), 파랑(blue) 빛을 섞어
여러 가지 빛의 색을 만들어 내려고 한다.

빨강(r), 초록(g), 파랑(b) 각각의 빛의 개수가 주어질 때,
(빛의 강약에 따라 0 ~ n-1까지 n가지의 빛 색깔을 만들 수 있다.)

주어진 rgb 빛들을 다르게 섞어 만들 수 있는 모든 경우의 조합(r g b)과
총 가짓수를 계산해 보자.

입력: 2 2 2

출력:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
8

일단 제가 처음 짠 코드와 고친 코드 그리고 정답으로 제출한 코드를 순서대로 나열하겠습니다.

 

 

1. for문 3개 사용한 코드

#include<iostream>
using namespace std;

int main()
{

	int a, b, c;
	int n = 0;

	cin >> a;
	cin >> b;
	cin >> c;
    
	for (int i = 0; i <a; i++)
	{
		for (int j = 0; j <b; j++)
		{
			for (int k = 0; k <c; k++)
			{
				cout << i<<" " << j <<" "<< k << endl;
				n++;
			}
		}
	}
	cout << n;

}

 

예제에 나와 있는 것을 보고 짰습니다.

 


2. for문 전부다 while문으로 고친 코드

#include<iostream>
using namespace std;

int main()
{

	int a, b, c;
	int n = 0;

	cin >> a;
	cin >> b;
	cin >> c;

	int i=0;
	while (i < a)
	{
		int j=0;
		while (j < b)
		{
        	int k=0;
			while (k < c)
			{
				cout << i << " " << j << " " << k<<endl;
				n++;
				k++;
			}
			j++;
		}
		i++;
	}
	cout << n;
			
}

마찬가지로 시간초과.....

 


3. 1084번 정답코드 

#include<iostream>
using namespace std;

int main()
{
	int a, b, c;
	int i,j,k;
	int n=0;

	cin >> a>>b>>c;
	
	for ( i=0 ; i <a; i++)
	{
		for (j=0 ; j <b; j++)
		{
			for (k=0 ; k <c; k++)
			{
				cout << i<<" " << j <<" "<< k << "\n";
				n++;
			}
		}
	}
	cout << n;

			
}

뭐가 다른지 보이시나요... endl이 "\n"로 변한 것 밖에 없답니다...

endl이 시간이 오래 걸린다고 하네요... 

전 이만 치킨 먹으러 갑니다.

728x90