17번 문제   

 

 

       

 

    내가 풀이한 답   

  순회(for)를 돌아 n까지의 합을 구해서 입력된 값과 비교하였다. 

#include <stdio.h>

int main(int argc, char** argv) {
	//freopen("input.txt", "rt", stdin);	
	int n, i, j, num, res, sum;
	scanf("%d", &n);
	
	for(i=0; i<n; i++){
		sum = 0;
		scanf("%d", &num);
		scanf("%d", &res);
		
		for(j=1; j<=num; j++){
			sum += j;
		}
		
		if(res == sum) printf("%s\n", "YES");
		else printf("%s\n", "NO");
	}

	return 0;
}

 

 결과는 통과하였다.

 

 

 

    사이트의 답안   

 

#include<stdio.h>
int main(){
	freopen("input.txt", "rt", stdin);
	int n, sum=0, i, j, m, ans;
	scanf("%d", &n);
	for(i=1; i<=n; i++){
		scanf("%d %d", &m, &ans);
		sum=0;
		for(j=1; j<=m; j++){
			sum+=j;
		}
		if(ans==sum) printf("YES\n");
		else printf("NO\n");
	}	
	return 0;
}

 

  사이트의 답도 똑같았다.

 

 

 

    조금 더 정리   

 

 뭔가 이대로 넘어가기엔 찜찜해서 좀 더 알아보았다. 어떤 블로그를 보니 시간복잡도 면에서 효과적인 방법을 찾았다. 원리는 다음과 같다. 10을 예로 들면 첫자리와 끝자리를 좁혀나가면서 더하면 11이 5번 나오는 것을 확인할 수 있다. 홀수인 11인 경우도 짝수 공식에 나머지 하나를 더해주면 된다.

 

 

#include <stdio.h>

int main(int argc, char** argv) {
	//freopen("input.txt", "rt", stdin);	
	int n, i, j, num, res, sum;
	scanf("%d", &n);
	
	for(i=0; i<n; i++){
		sum = 0;
		scanf("%d", &num);
		scanf("%d", &res);
		
		if(num%2==0) sum = (1+num) * (num/2);
		else sum = (1+num) * (num/2) + (num/2 + 1);
		
		if(res == sum) printf("%s\n", "YES");
		else printf("%s\n", "NO");
	}

	return 0;
}

 

 결과는 통과하였다.

 

 

'알고리즘 & 자료구조 > 기초 다잡기' 카테고리의 다른 글

19. 분노 유발자  (0) 2020.09.07
18. 층간소음  (0) 2020.09.07
16. Anagram(아나그램)  (0) 2020.09.06
15. 소수의 개수  (0) 2020.09.06
14. 가장 많이 사용된 자릿수  (0) 2020.09.06