코딩 테스트

    [백준][Gold2]10473 - 인간 대포 - JAVA

    [문제] https://www.acmicpc.net/problem/10473 10473번: 인간 대포 입력은 한 개의 길찾기 문제를 표현한다. 첫 줄에는 두 개의 실수가 입력되며 각각은 당신이 현재 위치한 X, Y좌표이다. 두 번째 줄에는 목적지의 X, Y좌표가 실수로 입력된다. 이어지는 줄에는 대 www.acmicpc.net [풀이] * 알고리즘 : 다익스트라 알고리즘(https://programmer-chocho.tistory.com/63) 1. 출발지와 도착지가 존재하기 때문에(a -> b) 최단 경로 알고리즘을 응용하는 문제다. 최초에 그래프를 어떻게 만들것이냐가 관건이다. 만들어진 그래프가 있어야 최단 경로를 구한든 말든 할 것이기 때문에;; 2. 최단 경로를 구하는 그래프를 만들려면 가중치가 ..

    [백준][Sliver1]1932 - 정수 삼각형 - JAVA

    [백준][Sliver1]1932 - 정수 삼각형 - JAVA

    [문제] https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net [풀이] * 알고리즘: 다이나믹 프로그래밍 다이나믹 프로그래밍을 이용하여 푸는 문제이다. 점화식은 쉽게 세울수 있다. 그런데 인덱스를 이용한 삼각형 배열을 만드는 것이 어려웠다. 어려웠던 이유는 1차원 배열로 삼각형을 만드려했기 때문이었다. 2차원 배열로 삼각형을 만드니 쉽게 다이나믹프로그래밍을 이용하여 문제를 풀 수 있었다. 바텀업 방식으로 풀면되는데 현재 위치에서 위로 왼쪽 대각선, 오른쪽 대각선에 있는 수 중 큰 수를 현재값과 더해주면 된다. 그런데 삼각..

    [코딩테스트] 2차원배열 회전하기

    [코딩테스트] 2차원배열 회전하기

    코딩테스트 문제를 풀다보면 2차원 배열을 조작하는 경우가 굉장히 많은 것 같다. (맵을 상하좌우로 기울여라, 지도를 회전하라 등등..) 최근에 푼 2020 KAKAO BLIND RECRUITMENT 기출문제중 자물쇠와 열쇠라는 문제가 있는데 여기서 2차원배열을 90, 180, 270, 360 도 회전시켜야 하는 코드가 필요하다. 배열의 인덱스를 이용해서 N도 회전했을 때 각 자리에 바뀌는 값들을 구해야 하는데 꾀나 번거로웠다. 다음에 또 구해야 한다면 할 수는 있겠지만 매번 시간을 굉장히 많이 잡아먹을 것 같아서 블로그에 정리해두려고 한다. 다음과 같은 2차원 배열이 있다고 하자. 먼저 배열을 시계방향으로 90도 회전시키면 배열이 다음과 같이 값이 바뀐다. 그리고 다음은 시계방향으로 180도 회전한 모습..

    [프로그래머스][Level3] 자물쇠와 열쇠 - JAVA

    [문제] https://programmers.co.kr/learn/courses/30/lessons/60059 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr [참고 영상] https://www.youtube.com/watch?v=I1App3qLi6o [code] package com.algorithm.thisiscodingtest.implement; import java.io.*; import java.util.*; public class Test08 { public static void main(String[] args) throws IOException..

    [백준][Gold5]1107 - 리모컨 -JAVA

    [문제] https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net [풀이] - 알고리즘 분류 부르트포스 알고리즘 정리를 하면 원하는 채널로 이동하는 방법은 2가지가 있다. 1. +,- 로만 이동하는 방법 2. 가장 근접한 채널까지 이동후, 나머지는 +,-로 이동하는 방법 처음에 1번 방법은 생각을 못했다. 그런데 만약 이동하려는 채널이 102번일 때 고장난 버튼 없다고 해서 102 세자리 수를 누르는 것보다 +를 2번 누르는 것이 더 클..

    [백준][Gold5] 12865 - 평범한 배낭 - JAVA

    [백준][Gold5] 12865 - 평범한 배낭 - JAVA

    [문제] https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 처음에 완전탐색으로 풀었는데 시간초과가 떴다. 찾아보니 배낭문제(knapsack problem)는 dp를 응용하는 아주 유명한 문제라고 한다. dp, 즉 메모이제이션을 이용하기 위해서는 값을 저장할 테이블을 정의해야 한다. 다음과 같은 이차원 배열을 정의하겠다. dp[i][j] = value - i : 1 ~ i 까지의 아..