전체 글 188

[Algorithm] 미로 탈출

문제 동빈이는 N X M 크기의 직사각형 형태의 미로에 갇혀 있다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 한다. 동빈이의 위치는 (1, 1)이고 미로의 출구는 (N, M)의 위치에 존재하며 한번에 한 칸씩 이동할 수 있다. 이 때 괴물이 있는 부분은 0으로 괴물이 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다. 이때 동빈이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하시오. 입력 조건 첫째 줄에는 N과 M이 주어진다. 두번째 줄부터 미로에 대한 정보가 주어진다. 출력 조건 최소 이동 칸의 개수를 출력한다. 풀이 미로를 탈출하는데 움직여야 하는 최소 칸의 개수를 구한다. 현재 위치에서 근처에 있는 칸부터 탐색하며 이동하면서 가야 한다. BFS (너비..

Algorithm 2021.05.12

[Algorithm] 음료수 얼려 먹기

문제 N X M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다. 이때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하시오. 입력 조건 첫째 줄에 얼음 틀의 세로 길이 N과 가로 길이 M이 주어진다. 두번째 줄부터 N X M 의 얼음 틀의 형태가 주어진다. 출력 조건 한 번에 만들 수 있는 아이스크림의 개수를 출력 풀이 N X M 행렬과 같이 주어지는 값에서, 주변에 0이 계속되면 하나의 아이스크림으로 본다. 0이 연속된 넓이를 구하는 문제와 같다고 생각한다. DFS (깊이우선탐색)을 통해 연결된 영역을 구하면 될 것 ..

Algorithm 2021.05.11

[Java] String 클래스

String 클래스는 문자열과 관련된 클래스 선언 String str = "abc"; char[] data = {'a', 'b', 'c'}; String str = new String(data); 사용 String class는 구성하는 문자를 조사하거나, string을 비교, 검색, 일부를 추출, 복사 등의 기능을 가진 메서드를 포함한다. '+' 연산자를 통해 두 개의 string을 합치기도 한다. 주요 메서드 charAt(int index) : index에 위치한 문자를 리턴한다. char 타입으로 리턴된다. compareTo(String anotherString) : 사전적으로 두 개의 string을 비교한다. int 타입이 리턴된다. a.compareTo(b)라고 했을 때, a == b이면 0, a..

Java 2021.05.10

[Algorithm] 게임 개발

문제 현민이는 게임 캐릭터가 맵 안에서 움직이는 시스템 개발 중이다. 캐릭터가 있는 장소는 1 X 1 정사각형으로 이루어진 N X M의 직사각형으로 각 칸은 육지 또는 바다이다. 캐릭터는 동서남북 중 한 곳을 바라본다. 맵의 각 칸은 (A, B)로 나타낼 수 있고, A는 북쪽으로부터 떨어진 칸의 개수, B는 서쪽으로부터 떨어진 칸의 개수이다. 캐릭터는 상하좌우로 움직일 수 있고, 바다로 되어 있는 공간에는 갈 수 없다. 캐릭터의 움직임을 설정하기 위해 정해 놓은 매뉴얼은 이러하다. 1. 현재 위치에서 현재 방향을 기준으로 왼쪽 (반시계 방향으로 90도 회전한 방향, 북->서)부터 차례대로 갈 곳을 정한다. 2. 캐릭터의 바로 왼쪽 방향에 아직 가보지 않은 칸이 존재한다면, 왼쪽 방향으로 회전한 다음 왼쪽..

Algorithm 2021.05.10

[Algorithm] 왕실의 나이트

문제 행복 왕국의 왕실 정원은 체스판과 같은 8 X 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서 있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다. 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다. 1. 수평으로 두 칸, 수직으로 한 칸 이동 2. 수직으로 두 칸, 수평으로 한 칸 이동 좌표 평면상에 나이트의 위치가 주어졌을 때, 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오. 행은 1-8, 열은 a-h로 표현한다. 좌표는 열행 순으로 표현한다. 입력조건 나이트의 현재 위치를 문자열로 입력한다. 예를 들어, a1와 같다. 출력조건 나이트가 현재 위치에서 이동 가능한 경우의 수를 출력한다. 풀이 ..

Algorithm 2021.05.09

[Algorithm] 1이 될 때까지

문제 어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택해 수행한다. 단, 두번째 연산은 N이 K로 나누어질 때만 선택할 수 있다. 1. N에서 1을 뺀다. 2. N을 K로 나눈다. 입력조건 N과 K가 자연수로 주어진다. 출력조건 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 횟수의 최솟값을 출력한다. 풀이 수행해야하는 횟수의 최솟값을 출력해야하기 때문에 2번 연산에 우선순위를 둔다. 먼저, 나눌 수 있으면 나누고 나눌 수 없다면 나눌 수 있을 때까지 -1 연산을 계속한다. 1이 되면 멈추도록 한다. import java.util.*; class Main { public static void main(String[] args) { Scanner sc = new Sca..

Algorithm 2021.05.08

[Java] 생성자 (Constructor)

자바에서 생성자는 인스턴스 생성 시 호출되는 인스턴스 초기화 메서드이다. 생성자의 조건 1. 생성자의 이름은 클래스의 이름과 같아야 한다. 2. 생성자는 리턴값이 없다. 생성자도 오버로딩이 가능하기 때문에, 하나의 클래스에 여러 개의 생성자가 존재할 수 있다. 기본 생성자 (default constructor) 클래스 내에 생성자가 하나도 정의되지 않은 경우, 컴파일러는 자동적으로 기본 생성자를 추가해 컴파일한다. Class() { } 매개변수도 없고 내용도 없다. 매개변수가 있는 생성자 매개변수를 선언하여 호출 시 값을 넘겨받아서 인스턴스의 초기화 작업에 사용할 수 있다. class Car { String color; String gear; int door; Car() { } //기본 생성자 Car(S..

Java 2021.05.07

[Algorithm] 숫자 카드 게임

문제 숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰을 지키며 카드를 뽑아야 한다. 1. 숫자가 쓰인 카드들은 N X M 형태로 놓여있다. 2. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다. 3. 그 다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다. 4. 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려해 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다. 입력 조건 첫 행에는 행의 개수 N과 열의 개수 M이 자연수로 주어진다. 두번째 행부터 N개 줄에 걸쳐 각 카드에 적힌 숫자가 주어진다. 출력 조건 게임의 룰에 맞게 선택한..

Algorithm 2021.05.07
반응형