Koder / 박성훈
article thumbnail
Published 2020. 10. 27. 22:32
백준 BOJ 1059 - 수 2 알고리즘/백준 BOJ

의외로 고민했는데

원인이 되게 의미없는거엿다

테스트케이스가 하나밖에 없어서 좀 고민한 문제이다.

 

https://www.acmicpc.net/problem/1059

 

1059번: 수2

첫째 줄에 Lucky Set에 포함된 숫자의 개수 L이 주어진다. 둘째 줄에는 L개의 수가 주어진다. 이 수는 1,000보다 작거나 같은 자연수이고, L은 50보다 작거나 같은 자연수이다. 그리고 중복되지 않는다

www.acmicpc.net

 

일단 첫번째 코너케이스

1

3

1

과 같은 경우에는 0을 가상의 left값으로 잡고 문제를 해결하면 된다.

 

두번째

1

998

999

과 같은 경우에는 1001을 가상의 right값으로 잡고 문제를 해결하면 된다

 

세번째

4

1 3 5 7

3

N이 Lucky Set 안에 있는 경우 답은 항상 0이다.

 

이 세가지 경우에 대한 코너케이스를 잘 처리해주면 AC가 나온다.

 

#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

int arr[100] = {0};

int main(){
	int n,k;
	int l=0,r=1001; // 첫번째와 두번째
	int sum=0;
	
	scanf("%d", &n);
	for(int i=0; i<n; i++)scanf("%d", &arr[i]);
	arr[n]   = 0;
	arr[n+1] = 1001;
	scanf("%d", &k);
	sort(arr, arr+n+2);
	
	for(int i=0; i<=n+1; i++) if(arr[i]==k){ printf("0"); return 0; } // 세번째
	for(int i=0; i<=n; i++){
		if(arr[i]<k&&k<arr[i+1]){
			l = arr[i];
			r = arr[i+1];
		}
	}
	
	printf("%d", (k-l)*(r-k)-1);
	return 0;
}

 

반응형