LV2 - 숫자 변환하기 (Java)

2024. 6. 25. 21:30·프로그래머스

 


 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/154538#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

dp? bfs 스러운 문제이다.

 

x로부터 조건에 맞게 값을 더해주거나 곱해주면서 뻗어가면서,

해당 값이 몇번만에 만드는지 파악해야한다.

 

값을 몇번만에 만드는지 저장할 array가 있어야하고,

bfs를 수행할 덱을 선언한다.

 

처음 x값을 0으로 설정한다음 이 값으로 부터 bfs를 수행한다.

방문 여부 및 한계값을 체크한다음, 조건에 만족한다면 기존 값을 만드는 횟수 + 1 을 

배열에 저장해주면 된다.

 

dfs 로도 시간은 되나, 스택오버플로우가 걸리므로 bfs로 풀이하면 된다.

 

코드

import java.util.*;

class Solution {
    public int answer = Integer.MAX_VALUE;
    public int[] nums = new int[1000001]; // visiting array
    public Deque<Integer> deq = new ArrayDeque<>();
    public int lim = 1000000; // limit
    
    public int solution(int x, int y, int n) {
        Arrays.fill(nums, Integer.MAX_VALUE);
        deq.addLast(x);
        nums[x] = 0; // 방문처리

        // deque check
        while(!deq.isEmpty()){
            int target = deq.pollFirst();
            int count = nums[target];
            
            visitCheck(target + n, count+1);
            visitCheck(target * 2, count+1);
            visitCheck(target * 3, count+1);
        }

        return nums[y] == Integer.MAX_VALUE ? -1 : nums[y];
    }

    public void visitCheck(int value, int cnt) {
        if(value > lim) return;
        
        if(nums[value] == Integer.MAX_VALUE){
            nums[value] = cnt;
            deq.addLast(value);
        }
    }
}

 

후기

 

처음에 dfs로 했을때 계속 런타임에러가 났는데 스택 문제였다.

bfs가 일반적으로는 문제 풀이에 더 용이한 거 같다.

'프로그래머스' 카테고리의 다른 글

LV2 - 소수 찾기 (Java)  (0) 2024.06.27
LV2 - 다리를 지나는 트럭 (Java)  (0) 2024.06.26
LV2 땅따먹기 (Java)  (1) 2023.12.21
LV2 뒤에 있는 큰 수 찾기 (Java)  (1) 2023.12.21
LV3 단어 변환 (Java)  (1) 2023.11.24
'프로그래머스' 카테고리의 다른 글
  • LV2 - 소수 찾기 (Java)
  • LV2 - 다리를 지나는 트럭 (Java)
  • LV2 땅따먹기 (Java)
  • LV2 뒤에 있는 큰 수 찾기 (Java)
whiporithm
whiporithm
https://github.com/whipbaek
  • whiporithm
    whiporithm
    whiporithm
  • 전체
    오늘
    어제
    • 분류 전체보기 (176)
      • 개발 (17)
      • LeetCode (3)
      • 백준 (79)
      • 프로그래머스 (64)
      • 회고 (6)
      • 쉘 스크립트 (4)
      • 자바 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    자바알고리즘
    nestjs 배포
    Java
    코딩테스트
    쉘스크립트
    개발
    코테
    알고리즘
    파이썬
    카카오코딩테스트
    쉘
    자바
    파이썬알고리즘
    파이썬코테
    자바코테
    카카오
    카카오코테
    프로그래머스
    파이썬코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
whiporithm
LV2 - 숫자 변환하기 (Java)
상단으로

티스토리툴바