본문 바로가기

백준45

[JAVA] 2048(Easy) 삼성 기출 문제 (백준 12100) 전형적인 구현 문제 상하좌우를 그대로 구현했는데 다른 사람들 풀이 보니까 rotate 를 구현하고 방향 하나만 구현한 것이 많이 보였다.. 이렇게하면 확실히 코드 길이는 줄어 들듯 하다. 내 코드를 보면서 불필요한 부분들이 몇개 발견되었다. 먼저 나의 풀이를 소개한다. 만약 배열의 한줄만 생각한다고 가정하자. [2,2,0,4,4] 의 배열이 있을 때 오른쪽으로 이동하면 [0,0,0,4,8] 왼쪽으로 이동하면 [4,8,0,0,0] 이렇게 될 것이다. 왼쪽으로 이동할 때 어떻게 풀었는지 보자. 똑같은 크기의 0으로 가득차있는 배열 tmp = [0,0,0,0,0] 를 선언및 초기화한다. 그리고 비어있는 Deque 한개를 선언하고 boolean으로 ok =true를 선언하여 이전에 합쳐졌는지 안 합쳐졌는지 체크.. 2020. 9. 1.
[JAVA] 토마토 (백준 7569) 이 문제는 2차원이 아니라 3차원으로 bfs푸는 것이다. 또한 익기 시작하는 지점이 정해진 것도 아니며 여러개가 있을 수도 있고 없을 수도 있다. 관건은 모든 토마토가 익었는지 확인하는 것과 모두 익었다면 며칠이 걸리는지 구하는 것이 핵심이다. 본인이 접근한 방법대로 2층짜리 3x3 토마토상자가 있다고 가정하고 풀어보는 예시를 보자. 예) (z,x,y) 에서 z 는 높이이며 , x 는 가로, y는 세로다. x,y,z 모두 0부터 시작한다. 시작전 ( 0초 ) 큐에 남은 좌표 : (0,1,1) 1층 0 0 0 0 1 0 0 0 0 2층 0 0 0 0 0 0 0 0 0 1초후 큐에 남은 좌표: (0,0,1) , (0,1,0), (0,2,1) , (0,1,2) 1층 0 2 0 2 1 2 0 2 0 2층 0 0.. 2020. 8. 15.
[JAVA] 촌수 계산 (백준 2644) dfs,bfs 문제가 제일 재밌는거 같다. 출발지와 목적지를 정하고 가는 데 몇군데를 거치느냐를 따지면 된다. 예를 들어, 7번 목적지에서 3번으로 갈려면? 최소 3번만에 갈 수있다. dfs로 위의 로직을 구현한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main{ static int n; static int st,ed; static int answer=-1; public static void main(String[] args) throws IOException{ FastScanner fs = new FastScanner.. 2020. 8. 14.
[JAVA] 맥주 마시면서 걸어가기 (백준 9205) 풀이) 맥주는 20병 들고 있고 50미터마다 1병씩 소모된다면 한번에 이동할 수 있는 최대 거리는 1000이다. 그래서 거리가 1000이하인 노드들을 모두 방문해 보면서 그곳이 도착지점인지만 확인하면 된다. 위와 같이 지도가 있을 때 1000 보다 큰 간선은 제거해준다. 그러면 이제 bfs로 탐색해서 도착지에 도착할 수있는지 점검하면 된다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main{ static int testCase,storeCnt; static Pos[] posList; public static void mai.. 2020. 8. 13.
[JAVA] 바이러스 (백준 2606) 객체 배열로 한번 풀어봤다. 객체배열은 초기화를 따로 해줘야하는 것을 잊지말자... bfs 로직은 심플하다. 1. queue에 node가 있다면 node를 queue에서 꺼낸다. 없다면 종료한다. 2. node 의 방문여부를 체크하고 방문한 적 있다면 1번으로 간다. 3. 방문한적이 없다면 방문체크를 하고 answer를 1증가한다. 4. 나와 연결된 모든 node를 queue에 넣고 1번으로 간다. import java.util.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.StringTokenize.. 2020. 8. 13.
[JAVA] 로봇 청소기 (백준 14503) 자바 스트림을 좀 활용하고 싶은데 맘처럼 잘 안된다. 스트림을 잘 활용하면 정말 편하게 풀수 있을거 같은데.. 알고리즘을 다 주어줬기 때문에 구현만 하면 된다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; import static java.lang.System.*; public class Main{ static int n,m; static final int[][] d4 = {{-1,0},{0,1},{1,0},{0,-1}}; public static void main(String[].. 2020. 8. 12.
[JAVA] 미로탐색 (백준 2178) 유튜버 SecondThread 님이 자주 쓰시는 fastScanner를 연습하고자 bfs 문제중에 가장 기본중의 기본을 풀어보았다. 나중에 bfs 로 접근할 일이 있으면 템플릿으로 써도 될듯 하다. import java.io.*; import java.util.*; import static java.lang.System.*; public class Main { private static int n,m; private static final int[][] d4 = {{1,0},{0,1},{-1,0},{0,-1}}; public static void main(String[] args) throws IOException { FastScanner fs = new FastScanner(); n= fs.nextIn.. 2020. 8. 12.
[JAVA] 괄호 추가하기 (백준 16637) 아직까지 문자하나하나 다루는 거랑 알고리즘 할때, 컬렉션을 다루는 스킬이 많이 부족함을 느낀다. 매일 하나씩 풀다보면 적응 되겠지... dfs로 간단하게 풀수있다. a + b - c 가 있다면 1) a+b 하고 넘기기 2) a+ (b-c) 하고 넘기기 그림으로 설명하면 아래와 같다. import java.io.*; import java.util.*; public class Main { static int n; static int answer = -(int)Math.pow(2,31); static ArrayList nums = new ArrayList(); static ArrayList ops = new ArrayList(); public static int cal(int a,int b,char op){ .. 2020. 8. 10.
[JAVA] 나무 자르기 (백준 2805) 이분탐색의 기본중에 기본이라고 생각한다. 문제는 쉽지만 프로그래머스에서만 풀다보니 입출력하는 방법이 어색했다. 입출력하는 방법에도 익숙해 질겸 백준문제 쉬운거 하나 골라보았다. 다른 사람들의 풀이를 보니 대부분 BufferReader 와 StringTokenizer의 조합을 쓰고 있었다. 본인도 두개의 조합으로 문제를 풀었다. high를 tree의 최대값으로 설정하면 440ms 까지 줄일 수 있다. 220ms 까지 줄이려면 입출력을 직접 코딩해야한다.... 2020. 7. 30.