코딩/프로그래머스 코딩테스트

[프로그래머스] 약수의 개수와 덧셈

민쯔 2021. 10. 14. 15:50
728x90
반응형

안녕하세요. 민쯔입니다.😊

이번에는 약수의 개수와 덧셈을 풀어보았습니다.

사실 이 문제 풀긴 풀었는데 제출 후 채점하기에서 테스트 1번이 계속 틀려서 결국 저보다 코드 훨 잘 치는 남친님한테 SOS 해서 해결했습니다...😢

function solution(left, right) {
    var answer = 0;
    
    for(let i=left; i<= right; i++){
        let count = 0;
        for(let j=1; j< i+1; j++){
            if(i % j == 0) count++;
        }
        count % 2 == 0 ? answer += i : answer -= i
    }
    return answer;
}

이렇게 간단한데... 제가 겉멋만 들어서 reduce, map, for of 이런 거 쓰다가 산으로 갔어요... 충분히 쉽게 풀 수 있는걸 제가 왜 그렇게 풀었는지 모르겠네요.😢 기초가 중요하다는 거 다시 한번 반성 또 반성합니다...😂

 

// left부터 right까지의 모든 수 구하기
for(let i=left; i<= right; i++){
	// left : 13, right : 17 이면 13, 14, 15, 16, 17 이 나옴
 }

문제에서 "left부터 right까지의 모든 수들 중에서"라는 말이 있는데요. 첫 번째 예시에서 left 13, right 17이 주어진다면, 13, 14, 15, 16, 17 이겠죠?

그래서 13부터 17까지 for문으로 돌리면 for(let i=left; i<= right; i++) 쓰기게 되는 겁니다.

  • for(let i=left; i<= right; i++) → for(let i=13; i<= 17; i++)

 

// left ~ right의 각각의 약수의 개수를 구하기
for(let i=left; i<= right; i++){ // left : 13일 경우 i = 13
        let count = 0;
        for(let j=1; j< i+1; j++){ // j는 1 ~ 13까지 반복
            if(i % j == 0) count++; // j가 i의 약수가 맞을 경우 count는 1씩 증가
        }
}

count 변수는 약수의 개수를 나타내는 변수입니다.

for(let j=0; j< i+1; j++)에서는 left 13, right 17일 경우 

  • i = 13이면 for(let j=1; j< 14; j++) 임으로  j는 1~13 (1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)이 됩니다.

 

if(i % j == 0) count++; 은 약수의 개수를 구하기 위한 코드 줄입니다.

  • i % j == 0 : 약수를 구하는 방법

if(i % j == 0)가 해다 되는 경우 즉 i=13의 약수 일 경우 count++를 해서 i의 약수의 개수를 구합니다. 그러면서 left 13, right 17일 경우 13부터 17까지의 약수의 개수를 구하게 됩니다.

 

// 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수 구하기
for(let i=left; i<= right; i++){
        let count = 0;
        for(let j=1; j< i+1; j++){
            if(i % j == 0) count++;
        }
        // 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수
        count % 2 == 0 ? answer += i : answer -= i 
}

 

count % 2 == 0 ? answer += i : answer -= i

여기서는 삼항 조건 연산자를 사용해서 구했는데요.

  • count % 2 == 0 : 조건
  • answer += i : true
  • answer -= i : false

count % 2 == 0을 사용하여 짝수인지를 구하였고 짝수이면(참일 경우) 더하고 홀수면(거짓일 경우) 뺐습니다.

728x90
반응형

'코딩 > 프로그래머스 코딩테스트' 카테고리의 다른 글

[프로그래머스] 소수 만들기  (0) 2021.11.01
[프로그래머스] 실패율  (0) 2021.10.25
[프로그래머스] 예산  (0) 2021.10.06
[프로그래머스] K번째수  (0) 2021.10.02
[프로그래머스] 내적  (0) 2021.09.24