Algorithm 78

[Algorithm] 떡볶이 떡 만들기

문제 오늘 동빈이는 여행가신 부모님을 대신해서 떡집 일을 하기로 했다. 오늘은 떡볶이 떡을 만드는 날이다. 동빈이네 떡볶이떡은 재밌게도 떡볶이 떡의 길이가 일정하지 않다. 대신에 한 봉지 안에 들어가는 떡의 총 길이는 절단기로 잘라서 맞춰준다. 절단기에 높이 H를 지정하면 줄지어진 떡을 한번에 절단한다. 높이가 H보다 긴 떡은 H 위의 부분이 잘릴 것이고, 낮은 떡은 잘리지 않는다. 예를 들어 높이가 19, 14, 10, 17cm인 떡이 나란히 있고 절단기 높이가 15cm로 지정하면 자른 뒤 떡의 높이는 15, 14, 10, 15cm가 될 것이다. 잘린 떡의 길이는 차례대로 4, 0, 0, 2cm이다. 손님은 6cm만큼의 길이를 가져간다. 손님이 왔을 때 요청한 총 길이가 M일 때, 적어도 M만큼의 떡을..

Algorithm 2021.05.17

[Algorithm] 부품 찾기

문제 동빈이네 전자 매장에는 부품이 N개 있다. 각 부품은 정수 형태의 고유한 번호가 있다. 어느 날 손님이 M개 종류의 부품을 대량으로 구매하겠다며 당일 날 견적서를 요청했다. 동빈이는 때를 놓치지 않고 손님이 문의한 부품 M개 종류를 모두 확인해서 견적서를 작성해야 한다. 이때 가게 안에 부품이 모두 있는지 확인하는 프로그램을 작성해보자. 예를 들어, 가게의 부품이 총 5개일 때 부품 번호가 다음과 같다고 하자. N = 5 [8, 3, 7, 9, 2] 손님은 총 3개의 부품이 있는지 확인 요청했는데, 부품 번호는 다음과 같다. M = 3 [5, 7, 9] 이 때, 부품이 있으면 yes, 없으면 no를 출력한다. 입력 조건 첫번째 줄에 가게의 부품 총 개수 N이 입력된다. 두번째 줄에 가게에 있는 부품..

Algorithm 2021.05.16

[Algorithm] 두 배열의 원소 교체

문제 동빈이는 두 개의 배열 A와 B를 가지고 있다. 두 배열은 N개의 원소로 구성되어 있으며, 배열의 원소는 모두 자연수이다. 동빈이는 최대 K번의 바꿔치기 연산을 수행할 수 있는데, 바꿔치기 연산이란 배열 A에 있는 원소 하나와 배열 B에 있는 원소 하나를 골라서 두 원소를 서로 바꾸는 것을 말한다. 최종 목표는 배열 A의 모든 원소의 합이 최대가 되도록 하는 것이다. 입력 조건 첫번째 줄에 n, k가 입력된다. 두번째 줄에 배열 A의 원소, 세번째 줄에 배열 B의 원소가 입력된다. 출력 조건 최대 K번의 바꿔치기 연산을 수행하여 만들 수 있는 배열 A의 모든 원소의 합의 최대값을 출력한다. 풀이 K번의 바꿔치기 동안, 배열 A의 최소와 배열 B의 최대를 교환한다. K번 동안 만들 수 있는 배열 A의..

Algorithm 2021.05.15

[Algorithm] 성적이 낮은 순서대로 출력하기

문제 N명의 학생 정보가 있다. 학생 정보는 이름과 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때, 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오. 입력 조건 첫번째 줄에 학생의 수 N이 입력된다. 두번째 줄부터 '이름 성적' 과 같이 입력된다. 출력 조건 성적이 낮은 순서대로 출력한다. 풀이 Student 클래스를 생성해 이름과 성적을 멤버 변수로 갖는다. 입력 되는대로 Student 클래스로 이루어진 배열을 생성한다. 그리고 성적 값에 따라 정렬하고 출력한다. import java.util.*; class Student implements Comparable { private String name; private int score; Student (String na..

Algorithm 2021.05.14

[Algorithm] 위에서 아래로

문제 하나의 수열에는 다양한 수가 존재한다. 이러한 수는 크기에 상관없이 나열되어 있다. 이 수를 큰 수부터 작은 수의 순서로 정렬해야 한다. 수열을 내림차순으로 정렬하는 프로그램을 만드시오. 입력 조건 첫째 줄에 수열에 속한 수의 개수 n 이 주어진다. 둘째 줄부터 수열에 포함된 수 n개가 입력된다. 출력 조건 입력으로 주어진 수열이 내림차순으로 정렬된 결과를 출력한다. 풀이 입력을 배열로 받고, 배열을 내림차순으로 정렬해 하나씩 출력한다. import java.util.*; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Integer[] list ..

Algorithm 2021.05.13

[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

[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
반응형