Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 개발자 회고록
- Memoir
- map
- 코테
- 리눅스마스터 3과목
- 명령어
- 백준 javascript
- JavaScript
- toCharArray
- 스프링 빈
- 고잉버스
- 스프링 컨테이너
- 월간코드챌린지
- 백준 java
- 리눅스
- 카카오
- 문자열
- Java
- 리눅스마스터1급
- java 백준 1차원 배열
- 자바스크립트 코딩의 기술
- Linux
- 반복문
- 연습문제
- GoingBus
- Kotlin
- 프로그래머스
- 리눅스마스터 1급 정리
- 코딩테스트
- 자바
Archives
- Today
- Total
hoon's bLog
Java 프로그래머스 3진법 뒤집기 자바 본문
반응형
문제출처 : https://programmers.co.kr/learn/courses/30/lessons/77884
[나의 풀이]
- 입력받은 좌우 값의 범위를 가지는 배열 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
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
Java 프로그래머스 약수의 개수와 덧셈 자바 (0) | 2022.06.13 |
---|---|
Java 프로그래머스 없는 숫자 더하기 자바 (0) | 2022.06.12 |
Java 프로그래머스 음양 더하기 자바 (0) | 2022.06.11 |
Java 프로그래머스 3진법 뒤집기 자바 (0) | 2022.06.11 |
Java 프로그래머스 내적 자바 (0) | 2022.06.10 |