ACM 문제 하나 도와주세요 ㅠㅠ
FaintTears
질문 제목 : ACM 문제 풀이 좀 도와주세요!질문 요약 :ACM 문제를 풀고있는데 논리상 어디가 틀렸는지 도저히 모르겠습니다 ㅜㅜ질문 내용 :
http://www.acmicpc.net/JudgeOnline/problem.php?id=1059여기에 있는 문제입니다.
상당히 쉬운 문제인 것 같은데 제가 문제를 잘못파악하고 있는지 자꾸 Wrong Answer 가 되더군요 ㅠ
제가 생각한 풀이는 일단 Lucky Set 을 오름차순으로 정렬하고 N 보다 처음으로 큰 숫자와 처음으로 작은 숫자의 위치를 찾아서
큰 수와 작은 수의 차를 이용하는 방식을 이용한 것입니다.
그런데, 처음 코딩했을 때처음으로 큰 숫자가 나타나는 위치를 i 라고 하고, 처음으로 작은 숫자가 나타나는 위치를 i-1로 두고문제 풀이를 했는데요, 문제 조건에 N은 Lucky Set에서 가장 큰 수보다 작거나 같은 자연수이다. 라고 했으니i-1 의 위치에 있는 값이 N이 될 수도 있어서두 위치를 따로 찾았습니다. (물론, Lucky Set의 가장 큰 숫자가 N과 같아서, i가 L을 초과했을 때 i-1 위치의 값이 N이 되겠죠)
또한 N의 값이 Lucky Set의 모든 숫자보다 작을 수도 있기 때문에 계산의 편의상 Lucky Set의 가장 처음 숫자는 0으로 했습니다.
그리고 Lucky Set에 숫자 N이 있는 경우에는 만족하는 Unlucky 구간이 없으므로 0을 출력하도록 했습니다.
제가 어디를 잘못 파악했거나 간과한 것일까요 ㅜㅜ 아님 코딩 문제일까요 ㅜㅜ 도저히 모르겠습니다 ㅜㅜ
제 소스코드를 올리겠습니다.
================================================================
#include stdio.h#include algorithmusing namespace std;FILE *inf = fopen(input.txt,r), *outf = fopen(output.txt, w);//FILE *inf = stdin, *outf = stdout;int L, N;int lucky[55] = {0};int main(void){ int i, j, count = 0; fscanf(inf,%d, &L); for(i = 1; i = L; i++) fscanf(inf, %d, &lucky[i]); sort(lucky+1,lucky+L+1); fscanf(inf,%d, &N); lucky[L+1]= N+1; for(i = 1; i = L; i++) if(lucky[i] N) break; for(j = L; j 0; j--) if(lucky[j] N) break; if(lucky[i-1] == N) fprintf(outf,0); else fprintf(outf,%d, lucky[i] - lucky[j] - 2); return 0;}