hoon DevLog

Java 프로그래머스 3진법 뒤집기 자바 본문

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

Java 프로그래머스 3진법 뒤집기 자바

개발한기발자 2022. 6. 11. 22:23
반응형

문제출처 : https://programmers.co.kr/learn/courses/30/lessons/77884

 

코딩테스트 연습 - 약수의 개수와 덧셈

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주

programmers.co.kr


[나의 풀이]

- 입력받은 좌우 값의 범위를 가지는 배열 rangeNum 선언

- 안 쪽 for문에서 rangeNum 인덱스의 약수를 ArrayList를 선언하여 약수값만 저장

- 약수의 개수를 홀짝 여부를 판단하여 연산


  
import java.util.ArrayList;
class Solution {
public int solution(int left, int right) {
int answer = 0;
int[] rangeNum = new int[right - left + 1]; //좌우측 숫자 범위만큼 배열 선언
for(int i=0; i < rangeNum.length; i++){
rangeNum[i] = left + i;
ArrayList<Integer> arrList = new ArrayList<>();
for(int j=1; j <= rangeNum[i]; j++){
//약수들만 list에 담아 저장
if(rangeNum[i]%j == 0){
arrList.add(j);
}
}
//return 변수에 삼항연산자를 통해 홀짝여부를 판단 후 더해주기
answer = (arrList.size()%2 == 0 ? answer+rangeNum[i] : answer-rangeNum[i]);
}
return answer;
}
}

이 문제에선 각 범위별 나름 약수를 판별하고,

판별한 약수에 대한 값을 어떻게 처리할 것인지가 관건이였던 것 같다.

과연 고수분들은 어떻게 했을까? 두구두구두구두구두구~~~~~~~~~

 

[다른사람의 풀이-1]


  
class Solution{
public int solution(int left, int right) {
int answer = 0;
for (int i=left;i<=right;i++) {
//제곱수인 경우 약수의 개수가 홀수
if (i % Math.sqrt(i) == 0) answer -= i;
//제곱수가 아닌 경우 약수의 개수가 짝수
else answer += i;
}
return answer;
}
}

 

[다른사람의 풀이-2]


  
class Solution{
public int solution(int left, int right) {
int answer = 0;
//애초에 입력받은 left, right로 반복문의 범위 설정
for(int i = left; i <= right; ++i){
int count = 0; //약수의 개수를 담는 변수
for(int j=1; j<=i; ++j)
if(i%j == 0) count++;
//약수 개수의 홀짝을 판별하여 연산..
if(count%2 == 0) answer += i;
else answer -= i;
}
return answer;
}
}

 

[정리]

- 역시 ArrayList까지 쓸 일이 아니였음... 조금만 더 생각해봤다면 불필요한 변수가 생기지 않았던 것
- 최대한 입력받은 값을 가지고 활용하는 사고가 코드를 더욱 간결하게 한다....

- 수학적 사고는 정말 멋지다........

 

개인피셜 난이도 : ★☆☆☆☆(난이도가 낮을 때를 행복해하자ㅠㅠ)

내 방식대로 했다면 1정도 겠지만, 단순히 반복문만을 이용해서 하라고 했다면

별 2개 이상인 것 같았다...

다른 분들의 코드 자체는 그렇게 복잡하지 않다.

하지만 늘 그렇듯, 복잡해 보이는 듯한 조건들을 간소화 하고,

간결하게 코딩을 한다는 것 자체가 기발하고 실력인것 같다.

다른 사람들 코드의 기발한 아이디어에 오늘도 무릎을 탁친다.

 

끝!

728x90
반응형