본문 바로가기

Java78

[JAVA] 백준 - DSLR 9019 ( BFS) www.acmicpc.net/problem/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 � www.acmicpc.net 클래스 Pair 를 계속 생성해서 그런지 모르겠는데 메모리 엄청 쓴다.. 쓰지 않으면 더 빠르게 구동 되지만 직관적으로 이해하고 문제 풀이가 빨라서 Pair 클래스를 만들어서 쓰고 있다. # 문제의 관건인 D S L R 을 구현하기 //D nx = (x*2)%10000; //S nx = x==0?9999:x-1; //L nx = (x%1000)*10 + (x/1000); //R nx = (x/1.. 2020. 10. 8.
[JAVA] 백준 - 데스나이트 (BFS) www.acmicpc.net/problem/16948 16948번: 데스 나이트 게임을 좋아하는 큐브러버는 체스에서 사용할 새로운 말 "데스 나이트"를 만들었다. 데스 나이트가 있는 곳이 (r, c)라면, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)로 이동할 수 있다. 크 www.acmicpc.net 가장 기본적인 로직만 있는 문제. 상하좌우가 아니라 이동할 수 있는 다음 장소가 6군데라는점만 조심하면 된다. 또한 한번 방문한 곳을 또 방문하여 최단거리를 갱신하는 일은 없으므로 2차원 배열로 방문 체크를 해도된다. import java.util.LinkedList; import java.util.*; class Main{ stat.. 2020. 10. 8.
[JAVA] 백준 - 뱀과 사다리 게임 (BFS) www.acmicpc.net/problem/16928 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 뱀으로 가면 무조건 손해라고 생각했지만 아니다. 만약 아래처럼 테스트 케이스를 주어진다고 해보자. # 뱀을 타야만 최단거리를 만드는 테스트 케이스 2 1 2 50 49 100 51 48 1. 1을 던져서 2번으로 간 다음 사다리를 타고 50으로 간다. 2. 1을 던져서 51번으로 간 다음 뱀을 타고 48로 간다. 3. 1을 던져서 49번으로 간 다음 사다리를 타고 .. 2020. 10. 8.
[JAVA] 백준 구슬탈출 2 - 13460 ( DFS & 구현) www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 구현 + dfs 문제 1. 빨간 구슬과 파란 구슬은 동시에 같은 위치에 있을 수 없다.(핵심구현) 구현의 첫번째 난관이다. 아래처럼 방향을 정하고 int[] dx = {-1,1,0,0}; int[] dy = {0,0,-1,1}; 기존 위치가 [x,y] 라면 다음 위치는 [ x + dx[i], y + dy[i] ] 이다. (이때 i는 0부터 3까지 중 하나의 숫자.. 2020. 10. 1.
[JAVA] 백준 최단 경로 1753 ( 다익스트라 알고리즘) www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1≤V≤20,000, 1≤E≤300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1≤K≤V)가 주어진다. www.acmicpc.net 자바는 기본적으로 우선순위 큐는 최소힙으로 구현되어 있다. 알고리즘은 아래와 같다. 1. 다익스트라 알고리즘 준비물 : dist 배열 (출발점에서 각 지점까지 최단거리 배열 초기는 모든 값이 INF ) / visited 배열 / 인접리스트 or 인접행렬 등 그래프 간의 가중치를 알 수 있어야 함. 1. 우선순위큐 (최소힙) 생성 2. 출발 정점 dist는 0 으로 초기화 3. 큐에 출.. 2020. 9. 27.
[JAVA] 지형이동 - 프로그래머스 이때까지 배운 알고리즘들을 정리하기 딱 좋은 문제. 난이도가 4인 이유는 아마 구현해야할 양이 많아서 인듯 하다. 1. BFS or DFS 로 그룹 나누기 만약 height 가 3일 때 land가 아래와 같다면 land[3][3] 1 1 13 5 1 12 7 6 11 원하는 결과인 group[3][3] 는 아래와 같다. group의 각 원소는 그룹 번호를 의미한다. 2. 인접리스트 생성하기 인접행렬로 할시 아래 처럼 메모리 초과난다. 인접 리스트의 결과물은 아래처럼 될것이다. 3. 거리가 작은 순으로 정렬하기 새로운 리스트와 클래스를 만들어서 정렬한다. gn 은 다음 그룹번호다. list 는 인접리스트를 말한다. Node 라는 클래스 인데 Node 는 원소로 a,b,d를 가진다. 즉, 그룹번호 a와 그룹.. 2020. 9. 26.
[JAVA] 백준 가르침 1062 www.acmicpc.net/problem/1062 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net 비트마스크를 이용해 풀어봤다. 중요한 점은 영어단어를 굳이 String 이나 char[] 로 표현하지 않아도 된다는 점이다. 예를 들어 "apple" 이라는 단어가 있다고 할 때 여기서 'a','p','l','e' 4가지의 알파벳을 사용했다는 것이 중요하다. 따라서 "apple" 이나 "apppple" 이나 "aaaaaple" 이나 모두 'a','p','l','e' 4가지의 알파벳을 사용했다. 이를 유용.. 2020. 9. 24.
[JAVA] 백준 스도미노쿠 4574 www.acmicpc.net/problem/4574 4574번: 스도미노쿠 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 채워져 있는 도미노의 개수 N이 주어진다. (10 ≤ N ≤ 35) 다음 N개 줄에는 도미노 하나를 나타내는 U LU V LV가 �� www.acmicpc.net 1. 스도쿠에서 방문 체크하기 9*9 스도쿠에서 임의의 점 (x,y) 에 숫자 num을 넣을 수 있는지 없는지 어떻게 판단할까?? 처음 생각했던 건 x행에 num이 존재하는지 검사하고 y열에 num이 존재하는지 검사하고 마지막으로 9*9 를 3*3 으로 나눈 각각의 박스에서 num이 존재하는지 확인하는 것이다. 별로 좋지 못한 방법이다. 더 좋은 방법이 있다. 0행에 8이 존재하는가? 이 .. 2020. 9. 24.
[JAVA] 백준 -부분 수열의 합 14225 www.acmicpc.net/problem/14225 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 � www.acmicpc.net 부분 수열이 처음엔 연속된 수의 나열인 줄 알고 풀었다가 아니였다. 원래 수열이 [1,4,3,2,3,1] 와 같이 있다면 [1], [1,3,2],[1,4,3],... 처럼 1개 이상의 원래의 순서를 유지한 수열을 부분 수열이라고 한다. 이러한 정의를 문제에 알려주면 좋았다만.. 여튼 문제는 어렵지 않으나 문제는 방문 체크이다. 방문 체크를 .. 2020. 9. 22.