일단 주어진 조건에서 n의 값이 1,000,000 이하기 때문에 1,000,000의 제곱근인 1,000을 이용해야겠다고 생각했습니다~
그리고 제곱은 자연수*자연수 꼴로 나타낼 수 있기 때문에 반복문을 사용해서 제곱과 n값을 비교하는 코드를 작성했습니다!
처음 짠 코드
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
for(int i = 1; i<=1000; i++){
if(i*i == n) answer = 1;
else answer = 2;
return answer;
}
이 코드의 문제점은 for문이기 때문에 끝까지 돌아간다는 점입니다! 따라서 어떤 수를 n값이 1,000,000이 아닌 이상 무조건 answer 값으로 2가 들어갑니다!
그래서 수정한 코드는
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
for(int i = 1; i<=1000; i++){
if(i*i == n){
answer = 1;
break;
}
if(i*i != n) answer = 2;
}
return answer;
}
for문의 조건은 똑같지만 i*i가 n과 일치하는 순간 반복문을 빠져나가게 break를 사용하였습니다~!
성공~~! (●ˇ∀ˇ●)
+ 추가로 반복문의 조건은 반복문을 1,000번 돌려야하기 때문에 굉장히 비효율적입니다! 고민 결과 i*i값은 n값을 넘을 필요가 없다는 것을 깨달았습니다!!
수정한 코드
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
for(int i = 1; i*i<=n; i++){
if(i*i == n){
answer = 1;
break;
}
if(i*i != n) answer = 2;
}
return answer;
}
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 치킨 쿠폰 (0) | 2023.08.01 |
---|---|
프로그래머스 - 양꼬치 (0) | 2023.07.31 |
프로그래머스 - 피자 나눠 먹기 (0) | 2023.07.25 |
프로그래머스 - 각도 (0) | 2023.07.13 |
프로그래머스 - 편지 (0) | 2023.07.11 |