어렵다... 어렵다... 어렵다... 하지만 내껄로 만들겠어
https://school.programmers.co.kr/learn/courses/30/lessons/12946?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;
public class Test10272 {
public static void main(String[] args) {
System.out.println(Arrays.deepToString(solution(2)));
}
static int[][] answer;
static int count=0;
public static int[][] solution(int n) {
answer = new int[(int)Math.pow(2,n)-1][2];
move(n,1,3);
return answer;
}
public static void move(int num, int x, int y){ // 개수,원래위치,목표위치
if(num>1) //중간으로 옮기기
move(num-1,x,6-x-y);
answer[count++] = new int[]{x,y};
if(num>1) // 목표위치로 옮기기
move(num-1,6-x-y,y);
}
}
하노이의 탑 문제 풀이)
n-1개 까지 중간으로 옮기는 것이 핵심 포인트.
ex. 원반이 4개일 때, 3개까지 중간으로 1,2,3번 원반을 옮겨주어야함.
그리고 1,2를 중간으로 또 이동시키고, 3을 목표지점으로 옮겨주어야함.
나는 move 메서드 내에서 answer 배열에 값을 넣고 싶었는데
이렇게 static 변수로 선언해두면 접근이 가능했다.
대신, 이때 index 번호를 설정할 변수도 같이 static으로 선언해두어야 해당 위치에 접근이 가능하더라.
이 부분을 해결못해서 처음에는 list로 풀었는데, static을 이용한 방법을 다른 스터디원의 코드를 보고 알게되었다.
'CS > 알고리즘' 카테고리의 다른 글
윷놀이 문제, Map merge 메소드 (0) | 2023.11.16 |
---|---|
게임개발 구현 문제풀이(좌표값 이동) (0) | 2023.11.05 |
시간 계산하기(손코딩) (0) | 2023.10.20 |
재귀함수와 반복문의 차이점 (0) | 2023.10.19 |
소수 구하기 (0) | 2023.10.03 |