일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- sloved.ac
- Algorithm
- 17087
- pccp
- programmers
- 24511
- 20006
- 프로그래머스
- 1342
- 9081
- solved.ac
- sovled.ac
- 파이썬
- 장고
- 알고리즘
- 6730
- 25379
- 15965
- 자바
- 23971
- Django
- PYTHON
- java
- 사용자정의필터
- 백준
- SWEA
- 11688
- 2866
- 라이브러리
- PS
Archives
- Today
- Total
코깽이의 코딩일기
[ 프로그래머스 / JAVA / Level 2 ] 점프와 순간 이동 본문
반응형
제출한 코드
1차 제출한 코드 - 정확성 60.0 효율성 0 ( 시간 초과 + 메모리 초과 )
import java.util.*;
public class Solution {
public int solution(int n) {
int cost = n;
// 방문 처리용 배열 세팅
int[] v = new int[n+1];
Arrays.fill(v, Integer.MAX_VALUE);
Deque <int[]> q = new ArrayDeque<>();
q.add(new int[] {0,0});
while(!q.isEmpty()){
int[] cur = q.poll();
// 불필요한 연산 제거
if(v[cur[0]] <= cur[1] || cost <= cur[1]){
continue;
}
// 방문처리
else{
v[cur[0]] = cur[1];
}
// 도착한 경우
if(cur[0] == n){
cost = cur[1];
continue;
}
// 순간이동 하는 경우
if(cur[0] * 2 <= n){
q.add(new int [] {cur[0] * 2, cur[1]});
}
// 점프하는 경우
if(v[cur[0]+1] > cur[1] + 1){
q.add(new int [] {cur[0] + 1, cur[1] + 1 });
}
}
return cost;
}
}
처음 생각한 로직
1. 단순 BFS 문제일꺼라고 생각했다.
2. 순간이동은 *2 점프하는 경우는 K만큼이니 +1로 고정시켜서 연산 진행
3. 중복된 연산을 피하기 위한 방문처리
틀린 이유 추측
1. 불필요한 연산으로 인한 메모리 및 시간 초과 발생
의문점
1. 시간 제한이 얼마인가?
2. 메모리 제한이 얼마인가?
2차 제출한 코드 - 정확성 60.0 , 효율성 40.0
import java.util.*;
public class Solution {
public int solution(int n) {
int cost = 0;
while(n!=0){
// 2로 나누었을 때 나머지가 0 이면 나누기 2
if(n%2 == 0){
n = n/2;
}
// 아닌 경우 1 감소
else{
n-=1;
cost++;
}
}
return cost;
}
}
생각한 로직
1. 입력받은 정수 n을 나누어지는 경우 2로 나눈다.
2. 2로 나눠지지 않는 경우 1을 감소 시키면서 비용을 증가한다.
3. 위 과정으로 n이 0이 될 때 까지 반복한다.
반응형
'PS > 프로그래머스' 카테고리의 다른 글
[ 프로그래머스 / JAVA / Level 2 ] 전력망을 둘로 나누기 (0) | 2024.06.13 |
---|---|
[ 프로그래머스 / JAVA / Level 1 ] [PCCP 기출문제] 1번 / 붕대 감기 (0) | 2024.06.13 |
[ 프로그래머스 / JAVA / Level 2 ] 짝지어 제거하기 (0) | 2024.05.30 |
[ 프로그래머스 / JAVA / Level 2 ] 다음 큰 숫자 (1) | 2024.05.30 |
[ 프로그래머스 / JAVA / Level 2 ] 숫자의 표현 (0) | 2024.05.29 |