목록전체 글 (245)
말랑한 하루
[ 핵심풀이 ] 숫자를 이어붙일 수 있는 재귀, 만들어진 숫자(String)의 중복을 판단할수 있는 HashSet을 활용하면 가볍다. [ 핵심소스 ] static void dfs(int y, int x, int cnt, String value) { if (cnt == 7) { hs.add(value); return; } for(int i=0;i
[ 핵심풀이 ] 모든 백터의 합의 최소가 되는 경우를 구하면된다! 백터는 방향을 가진 화살표이다. 라고만 알고있었고 어떻게만들어지는지 몰랐다. 두 좌표 A: {x1, y2}, B: {x2, y2}가 있을 때 나올 수 있는 벡터는 1) A→B (x2-x1, y2-y1) 2) B→A (x1-x2, y1-y2) 두가지가 나올수 있다. 즉 벡터는 한좌표에서 다른좌표를 뺀 값이라 할 수 있다. 문제에서 주어진것은 모든 벡터의 합이므로 쌍을 만들었을 때 A→B로가는경우 B→A로 가는경우를 visit으로 판별하고 전체 x, y값에 정방향의경우 +, 역방향의경우 - 를 해주면된다. [ 핵심소스 ] // 모든벡터의 합 구하기, 짝의개수는 전체의 절반이므로 cnt==ew/2 if (cnt == ew/2) { long x=..
[ Java ] import java.util.Scanner; public class _3499_퍼펙트_셔플 { static void init() { Scanner sc = new Scanner(System.in); int tc = sc.nextInt(); for(int t=1;t
[ 핵심풀이 ] Dfs로 구현한다면 별 특이사항없이 풀어낼 수 있다. 본인은 Bfs로 진행하며 시간초과를 맛봣기때문에 풀이를 좀 쓰고자한다. 문제에선 다음방으로 전진하기위해 수가 1더 커야한다. 1000 x 1000 에 상하좌우로 모든지점에대해서 검색하기때문에 각 좌표에서 모든지점까지 탐색하거나, 작은 숫자의 좌표부터 모든지점을 탐색한다면 시간초과가 발생한다. 또한 두 방법에서 이미 도착한지점에 앞으로 몇번 더 갈 수 있는지 판별해놓아도 마찬가지였다. 시간초과를 없애기위해 위 기본풀이를 역으로 생각하여 가장 큰 수의 좌표부터 1씩 감소시키며 탐색하고, 방문된곳은 제거하여 탐색의 시작을 하지않는 방식으로 풀어나갔다. *또다른풀이는 y x a b 4개의 값을통해 좌표와, 현재까지 최대수, 최소 방숫자를 가져..
[ 핵심풀이 ] 후위표기식을 사용한 문제이다 그대로 구현한다면 어렵지않다. 아직 아래코드는 완벽한 구현점이아니므로, 위 링크를 참고하기바란다. [ Java ] import java.util.Iterator; import java.util.Scanner; import java.util.Stack; public class _1224_계산기3 { static int len; static String input; static void init() { Scanner sc = new Scanner(System.in); for (int t = 1; t = '0' && index
[ 핵심풀이 ] 후위표기식을 사용한다. 이 문제는 괄호가 존재하지않으므로 바로 계산하여도 무방하다. 1224 계산기 3문제에서는 후위표기식에 대해서 다루므로 알아두도록하자. [ Java ] import java.util.Scanner; import java.util.Stack; public class _1223_계산기2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); for (int t = 1; t
[ 구현 순서 ] 0) Value (숫자)는 표현하고자하는 List (or String)에 바로 추가한다 1) 연산자에 가중치를 부여한다 ('+', '-' 동일 1) ('*', '/' 동일 2) 2) 모든 연산자('+', '-', '*', '/')는 스택에 담는다. 3) 연산자를 스택에 담기 전, 가중치에 따라 다음과같이 행동한다 3-1) 스택의 최상위 값(stack.top())의 가중치를 새로운 연산자와 비교한다 3-2) 만약 크거나 같다면, 스택의 최상위값 빼서 List (or String)에 담는다. 4) 여는 괄호 ( '(', '[', '{' )는 스택에 담는다. 5) 닫는 괄호 ( ')'. ']', '}' )가 나오는순간, 스택에서 여는괄호가 나올때까지 모든 연산자를 List (or String..
[ 핵심풀이 ] 수연이가 움직이기전에 악마의손아귀가 먼저 움직여야 수연이가 갈 수 없는 위치에 가는것을 막을 수 있다. 움직이는 수연이가 없는경우 게임오버된것이므로 종료한다. 움직이는건 S, 고정된건 D, 손아귀는 *임에 유의하자 (본인은 문제를잘못읽어 S와D를 바꿔풀었다) [ Java ] import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; class xy { int y; int x; xy(int y, int x) { this.y = y; this.x =..