인프런 커뮤니티 질문&답변

장혁준님의 프로필 이미지
장혁준

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1-L

1-L 주몽문제 시간초과 관련 질문입니다 ㅠ

작성

·

106

0

https://www.acmicpc.net/source/share/bc46fa452bbf42209281c4b2e3220c39

 

이 코드가 솔루션에서는 잘 돌아가는 데,백준에서는 시간초과라고 뜹니다 뭐가 문제인지 알 수 있을까요??

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 혁준님 ㅎㅎ

일단은 scanf와 cin은 되도록 같이 사용하시면 안됩니다.

두개를 같이 사용할 경우 입출력싱크를 맞추느라 -> 시간발생 -> 시간초과 발생할 수도 있습니다.

또한,

교안내의 입출력싱크 부분 참고부탁드립니다.


그리고... scanf를 cin으로 변경했더라도 이 코드는 문제가 있습니다. 바로 N의 범위인데요. 문제 최대 범위에 맞춰서 배열의 범위를 수정해야 합니다. (수정안할경우 런타임에러 발생합니다.)

#include <bits/stdc++.h>
#include <stdio.h>

using namespace std;

//재료의 고유번호를 담을 배열
int MtArrary[15000];

//입력받을 재료의 개수
int N;

//갑옷을 만드는 데 필요한 수
int Result;

//갑옷을 만들수 있는 수
int ArmourCnt;

//입력받을 재료의 고유 번호
int a;

int main()
{
	cin >> N;

	cin >> Result;

	if (N <= 0 || Result == 0)
		return 0;

	for (int i = 0; i < N; i++)
	{		 
        cin >> a; 
		
		if (a < 0)
			return 0;
				
		MtArrary[i] = a;
	}

	for (int First = 0; First < N; First++)
	{
		for (int Second = First+1; Second < N; Second++)
		{
			if (Second == N+1)
				break;

			if (MtArrary[First] + MtArrary[Second] == Result)
				ArmourCnt++;
		}
	}

	cout << ArmourCnt;
	return 0;
}

 

그리고 코드리뷰를 드리면요 ㅎㅎ

		if (a < 0)
			return 0;

입력값이 음수로 주어지는 경우는 없습니다.

또한 주어졌을 때 바로 끝내라는 문제 지문도 없습니다.

이런 불필요한 코드는 지워주셔야 해요 ㅎㅎ



또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

장혁준님의 프로필 이미지
장혁준

작성한 질문수

질문하기