본문 바로가기

백준45

[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] 백준 가르침 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.
[JAVA] 백준- 연산자 끼워 넣기 14888 www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, �� www.acmicpc.net 중복된 연산자에 대해서 따로 처리를 해야하는가 생각했는데, 중복계산해도 경우의 수가 10! 밖에 안되서 전체 순열 탐색으로 돌렸더니 통과되었다. import java.util.Scanner; class Main{ static int n; static int[] nums; static int[] operators; static int max = -987.. 2020. 9. 21.
[JAVA] 백준 1399 단어 수학 www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 알고리즘 완벽하다고 생각했으나 시간초과가 난 이유는 바로 String 연산 때문이다. AB 에서 A=9 이고 B=8 이라고 할 때, 98로 만드는 과정을 아채처럼 할 경우 int answer = 0; String s = "98"; answer += Integer.parseInt(s); 바로 시간 초과가 나온다. 반면 아래처럼 할 경우 시간초과를 피할 수 있다. int temp = 0; for(char c .. 2020. 9. 21.
[JAVA] 부등호 (백준 2529 ) www.acmicpc.net/problem/2529 2529번: 부등호 여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력� www.acmicpc.net 부등호의 수가 3 개 이며 서로 다른 한 자리 숫자 는 4 개 라고 가정해보자. 숫자 0부터9 까지 숫자들 중에 4개를 선택해서 모든 경우의 수를 따져야 하는가?? 그렇지 않다. 가장 작은수와 가장 큰 수를 구하는 것이 목적이기 때문에 가장 작은 수와 가장 큰 수의 조합은 이미 정해져 있다. 12,3,4 와 2,3,4,5 를 선택했다고 가정했을 때, 가장 작은 수는 1,2,3,4 에서 나올것이다. 마찬가지로.. 2020. 9. 21.