접근한 방법은 주어진 char 배열을 0 또는 해당 배열의 최대 값인지
비교 하여 맞다면 yes 아니면 no 라는 생각으로 작성하였습니다.
알고리즘의 복잡도가 반복문이 최소 1번은 들어가야 하고 ( 문제 입력수) 이후 제가 쓴부분은 1번인데, 이것마저도 없애야 하는 정도로 최적화 해야 한다면 정답에 대한 접근법을 다시 생각해야 겠군요.
결론은 제가 만든 for 문이 1번도 들어가면 시간초과가 되는건지 아니면
로직에 문제가 있는 건지 궁금합니다. ㅠ_ㅠ 헬푸요.
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>voidswipe(int*start,int*end);intmain(){charinputString[1000000+1]="0";scanf("%s",inputString);inttestcount=0;scanf("%d",&testcount);intstart=-1;intend=-1;if(testcount>100000)testcount=100000;if(testcount>=0){while(testcount--){scanf("%d %d",&start,&end);if(start<0)start=0;if(end>1000000)end=1000000;swipe(&start,&end);intresult=0;intbinary=1;// 1) char 를 2진수로 변경 후 다시 10 진수로 변경for(inti=end;i>=start;i--){if(inputString[i]=='1'){result+=binary;}binary=binary<<1;}// 2) 입력된 자릿수의 최대 int 값을 만듦intmax=1;max=binary-1;// 3) 0 또는 최대 값과 비교if(result==0||result==max)printf("Yes\n");elseprintf("No\n");}}return0;}voidswipe(int*start,int*end){inttemp=*end;if(*start>*end){*end=*start;*start=temp;}}
aozo
ZEROONE 문제 풀고 있습니다.
위와 같이 작성하였는데, 시간 초과로 나오네요.
접근한 방법은 주어진 char 배열을 0 또는 해당 배열의 최대 값인지
비교 하여 맞다면 yes 아니면 no 라는 생각으로 작성하였습니다.
알고리즘의 복잡도가 반복문이 최소 1번은 들어가야 하고 ( 문제 입력수) 이후 제가 쓴부분은 1번인데, 이것마저도 없애야 하는 정도로 최적화 해야 한다면 정답에 대한 접근법을 다시 생각해야 겠군요.
결론은 제가 만든 for 문이 1번도 들어가면 시간초과가 되는건지 아니면
로직에 문제가 있는 건지 궁금합니다. ㅠ_ㅠ 헬푸요.
10년 전