개발/알고리즘

알고리즘_부산코딩대회후기

송디 2019. 11. 16. 17:29

1번에서 n개의 문제를 출제하고, 각 문제는 1부터 10까지의 난이도를 가진다. 

이 중 정해진 규칙대로 문제를 출제해야 한다. 

정해진 규칙은 이렇다. 

 첫번째, 첫번째 문제가 두번째 문제보다 난이도가 낮다.

 두번째, 두번째 문제가 세번째 문제보다 난이도가 낮다.

 세번째, 문제의 난이도가 똑같으면 안된다. 

예를 들어, [1, 2, 5, 5, 3]이라는 문제가 있으면,

[1, 2, 3]은 가능하나 [1, 2, 5]는 불가능하다. 똑같은 점수가 있기 때문이다. 

1번 문제라 난이도도 낮아서 수월하게 풀릴 것이라 생각했다. 

그러나 80%의 정답률로 결국 통과하지 못하였다. 20분만에 풀고 넘어가려고 했는데, 1시간 넘게 잡고 있었다. 1시간 넘게 잡고 있을께 아니였는데, 집중할 수가 없었다. 

왜 80%가 나온 것일까..N도 10개 밖에 안되고, 난이도도 1부터 10까지이다. 배열도 간단하게 선언해줬다. 뭘까?

내가 예상하지 못한 예외 상황은 뭘까..

int main(){

int N, i, j, flag, min, input, count;
int arr[11] = {0};
int visited[11] = {0};
i = 0;
count = 0;
for(i = 0; i < N; i++){
	scanf("%d", &input);
	arr[i] = input;
    visited[input] = 1;
}
// 3개의 수를 뽑기 위해 반복한다. 
while(i < 3){
	// 난이도 10이 최대이므로, 11만 해도 충분하다.
    min = 11;
	i++;
	for(j = 1 ; j <= N; j++){
    	// 점수가 중복하지 않는 것들 중에 가장 작은 값을 뽑는다.
		if(arr[j] < min && visited[arr[j]]){
        	min = arr[j];
            flag = j;
        }
	}
    // 값이 나오면 flag의 값은 0이 아니게 된다. 
    // 다음에 똑같은 값을 뽑지 않게 visited를 0로 만들어준다. 
    if(flag != 0){
    	visited[arr[flag]] = 0;
        count++;
    }
    
    if(count == 3){
    	printf("YES\n");
    }else{
    	printf("NO\n");
    }
}

다음 문제는 string을 이용하는 것인데, 타임스탬프로 받아온 시간대가 안겹치도록 하는 것이다. 어찌보면 회의실 문제랑 형식이 비슷하다. 하지만 string을 int로 바꿔주는 과정이 필요한데, C언어로는 내가 구현이 빡세서 일찌감치 포기하고 다음 문제로 넘어갔다. 

 

 다음 문제는 멱수의 합이다. 백준 2410 문제로 완전히 똑같았다. DP로 푸는거라 생각했는데, 규칙이 생각나지 않았다.  결국 못풀었다. 4번 5번은 집중있게 보지도 못했다. 4번은 DFS아님 백트래킹일꺼 같다. 

 

총평 :

 일단 말려서 아쉽다. 2~3문제 정도 풀 수 있지 않을까 생각했는데, 꾸준히 해야겠다. 대회에 아쉬운 점은 문제가 너무 기존과 똑같은 것이라는 것이다. 물론 알고리즘 테스트라는 것이 비슷한 종류가 있을 수 밖에 없다. 그러나 문제가 대놓고 똑같다 보니 아쉬운게 있다. 근데 뭐 나같이 예전에 풀어보고도 못 푼 애들도 있으니까 상관없을지도?

 

근데 1번은 왜 80%가 나왔을까...? 

728x90