morenow
morenow
morenow
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (5)
    • [MSA] Spring Cloud로 개발하는 마이.. (14)
    • Baekjoon Online Judge (40)
    • Programmers (11)
    • Spring Boot (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • re-distribution
  • successHandler
  • 백준20058C++
  • 마법사 상어와 파이어스톰
  • HttpExchange
  • write skew
  • B Tree
  • JWT단점
  • Feign Client
  • Spring Boot
  • lost update
  • Refresh Token Refresh
  • copy up
  • B+ Tree
  • Open Feign
  • dirty write
  • Id Token
  • jwt
  • 백준 파이어스톰
  • HTTP Interface

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morenow

morenow

Baekjoon Online Judge

[BOJ] 9019 : DSLR (Java)

2023. 11. 9. 03:47

https://www.acmicpc.net/problem/9019

 

9019번: DSLR

네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에

www.acmicpc.net

걸린 시간 : 1시간 4분


C++에서 Java로 옮기려고 하니까 쉬운 코드여도 실수가 엄청 잦고 코드도 깔끔하게 안 써진다...

처음엔 DP로 생각하고 풀려다가,, 그냥 BFS로 밀어버려도 되겠다고 생각해서 중간에 싹 바꿨다.

자료구조

  • memo배열 : 해당 인덱스까지 오려면 어떤 연산을 거쳐야 하는지에 대한 String형 배열이다.
  • vis배열 : 해당 인덱스에 방문했다면 더 이상 방문하면 안된다. 첫 방문이 제일 빠른 연산일테니까 말이다.
  • q : 큐가 비어있지 않으면 도착지까지 방문하지 않았을 때 BFS를 반복한다.

정답 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class BOJ9019 {

    static String[] operator = {"D", "S", "L", "R"};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        while (T-- > 0) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            String[] memo = new String[10001];
            boolean[] vis = new boolean[10001];
            Queue<Integer> q = new LinkedList<>();
            q.offer(a);
            memo[a] = "";
            vis[a] = true;
            while (!q.isEmpty() && !vis[b]) {
                int cur = q.poll();
                for (int k = 0; k < 4; k++) {
                    int next;
                    if (k == 0)
                        next = (cur * 2) % 10000;
                    else if (k == 1)
                        next = (cur == 0) ? 9999 : cur - 1;
                    else if (k == 2)
                        next = (cur % 1000) * 10 + (cur / 1000);
                    else
                        next = (cur / 10) + (cur % 10) * 1000;

                    if (!vis[next]) {
                        vis[next] = true;
                        memo[next] = memo[cur] + operator[k];
                        q.offer(next);
                    }
                }
            }
            System.out.println(memo[b]);
        }
    }
}

'Baekjoon Online Judge' 카테고리의 다른 글

[BOJ] 12015 : 가장 긴 증가하는 부분 수열 2 (C++)  (1) 2023.12.26
[BOJ] 2805 : 나무 자르기 (C++)  (1) 2023.12.26
[BOJ] 14940 : 쉬운 최단거리 (Java)  (0) 2023.11.09
[BOJ] 2630 : 색종이 만들기 (Java) with 분할 정복  (1) 2023.11.09
[BOJ] 1927 : 최소 힙 (Java)  (0) 2023.11.02
    'Baekjoon Online Judge' 카테고리의 다른 글
    • [BOJ] 12015 : 가장 긴 증가하는 부분 수열 2 (C++)
    • [BOJ] 2805 : 나무 자르기 (C++)
    • [BOJ] 14940 : 쉬운 최단거리 (Java)
    • [BOJ] 2630 : 색종이 만들기 (Java) with 분할 정복
    morenow
    morenow

    티스토리툴바