코딩테스트

프로그래머스 - 제곱수 판별하기

오쟝 2023. 7. 26. 18:32

일단 주어진 조건에서 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