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 | 31 |
Tags
- 도커
- 스프링부트
- 인텔리제이
- dfs
- 이직
- 해시맵
- 구름LEVEL
- 프로그래머스
- Java
- 해결
- spring boot
- 문자열
- 자료구조
- 개발자
- spring
- Linux
- HTTP
- 배열
- docker
- 코딩테스트
- 스프링 부트
- 스타트업
- 주니어
- IntelliJ
- bfs
- 스프링
- 백엔드
- 구현
- 명령어
- HashMap
Archives
- Today
- Total
마이의 개발 블로그
[프로그래머스] 숫자 변환하기 (Java) 본문
반응형
접근 방식
숫자 x를 주어진 세 가지 방식을 활용하여 y로 변환할 수 있는 최소 횟수를 구하는 문제로, BFS로 접근하여 풀어냈다. 변환된 각각의 숫자를 하나의 Node로 보고, 한 번 변환될 때마다 Node에 숫자 number와 그 숫자가 되기까지의 변환 횟수를 count 변수에 저장하도록 했다. 문제 설명대로라면 x에서 시작하여 y까지 가야하는 게 맞지만, y에서 시작하는 것이 경우의 수 소거에 유리하여 반대 방향으로 시작했다.
로직 설명
- Node 클래스(이하 노드) 생성: 멤버변수 number, count
- BFS를 구현하기 위해 필요한 노드 큐 생성: queue
- 노드를 생성하여(number: y, count: 0) queue에 넣기
- queue에 노드가 존재하는 동안 반복:
1) 노드 한 개 poll()
2) (노드의 number가 x와 같을 경우), answer에 노드 count 값 저장 후 루프 종료
3) (아닐 경우) 노드의 number를 3으로 나눈 값, 2로 나눈 값, n을 뺀 값의 세 가지 경우에 대해 각각 노드를 생성하여 queue에 삽입 + 노드 생성 시 count 1 증가시키기
- 종료조건을 거치지 않은 경우 -1 반환
import java.util.*;
class Node {
int number;
int count;
Node(int number, int count){
this.number = number;
this.count = count;
}
}
class Solution {
public int solution(int x, int y, int n) {
int answer = -1;
Queue<Node> queue = new LinkedList<>();
queue.offer(new Node(y, 0));
while(queue.size() > 0){
Node poll = queue.poll();
int number = poll.number;
int count = poll.count;
if(number == x){
answer = count;
break;
}
if(number % 3 == 0){
queue.offer(new Node(number / 3, count + 1));
}
if(number % 2 == 0){
queue.offer(new Node(number / 2, count + 1));
}
if(number - n > 0){
queue.offer(new Node(number - n, count + 1));
}
}
return answer;
}
}
Note
- DP로도 많이들 풀었던데 나중에 시도해봐야겠다.
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 다항식 더하기 (Java) (0) | 2023.04.19 |
---|---|
[프로그래머스] 튜플 (Java) (0) | 2023.04.19 |
[프로그래머스] 달리기 경주 (Java) (0) | 2023.04.11 |
[프로그래머스] 게임 맵 최단거리 (Java) (2) | 2023.04.04 |
[프로그래머스] 피로도 (Java) (0) | 2023.04.01 |
Comments