[알고리즘] 99

구현 - 문자열 재정렬

문제 - 알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 위에 모든 숫자를 더한 값을 이어서 출력합니다. 입력 -> 출력 K1KA5CB7 -> ABCKK13 AJKDLSI412K4JSJ9D -> ADDIJJJKKLSS20 문제해결 1) 내 풀이 public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); int size = input.length(); char[] arr = new char[size];//알파벳만 꺼내서 담기 int num = 0;//숫자만 꺼내서 담기 for(int i..

구현 - 왕실의 나이트

문제 - 행복 왕국의 왕실 정원은 체스판과 같은 8 X 8 좌표 평면입니다. 왕실 정원의 특정한 한 칸에 나이트가 서 있습니다. - 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없습니다. - 나이트는 특정 위치에서 다음과 같은 2가지 경우로 이동할 수 있습니다. 1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기 2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 - 이처럼 8 X 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하세요. 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며 열 위치를 표현할때는 a부터 h로 표현합니다. 입력 -> 출력 c2 -> 6..

구현 - 시각

문제 - 정수 n이 입력되면 00시 00분 00초부터 n시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하세요. 예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각입니다. 00시 00분 03초 00시 13분 30초 반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안되는 시각입니다. 00시 02분 55초 01시 27분 45초 입력조건 - 첫째 줄에 정수 n이 입력됩니다 (0

구현 - 상하좌우

문제 - 여행가 A는 N X N 크기의 정사각형 공간 위에 서 있습니다. 이 공간은 1 X 1 크기의 정사각형으로 나누어져 있습니다. 가장 왼쪽 위 좌표는(1,1)이며, 가장 오른쪽 아래 좌표는 (N,N)에 해당합니다. 여행가 A는 상하좌우로 이동할 수 있으며, 시작 좌표는 항상 (1,1)입니다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있습니다. L - 왼쪽으로 한칸 이동 R - 오른쪽으로 한칸 이동 U - 위로 한 칸 이동 D - 아래로 한칸 이동- 이때 여행가 A가 N X N 크기의 정사각형 공간을 벗어나는 움직임은 무시됩니다. 예를 들어 (1,1)의 위치에서 L혹은 U를 만나면 무시됩니다. 입력조건:- 첫째 줄에 공간에 크기를 나타내는 N이 주어집니다.(1

그리디 - 모험가 길드

문제 - 한 마을에 모함가각 n명 있습니다. 모험가 길드에서는 n명의 모험가를 대상으로 '공포도'를 측정했는데, '공포도'가 높은 모험가는 쉽게 공포를 느껴 위험 상황에서 제대로 대처할 능력이 떨어집니다. - 모험가 길드장인 동빈이는 그룹을 안전하게 구성하고자 공포도가 x인 모험가는 반드시 x명 이상으로 구성한 모험가 그룹에 참여해야 여행을 떠날 수 있도록 규정했습니다. - 동빈이는 최대 몇 개의 모험가 그룹을 만들 수 있는지 궁금합니다. n명의 모험가에대한 정보가 주어졌을때, 여행을 떠날 수 있는 그룹 수의 최댓값을 구하는 프로그램을 작성하세요. 입력조건 - 첫째 줄에 모험가의 수 n이 주어집니다 (1

그리디 - 곱하기 혹은 더하기

문제 - 각 자리가 숫자(0~9)로만 이루어진 문자열 s가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 'x' 혹은 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하세요. 단 +보다 X를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정합니다. - 예를 들어 02984라는 문자열로 만들 수 있는 가장 큰 수는 ((((0+2)X9)X8)X4) = 576입니다. 또한 만들어 질수 있는 가장 큰 수는 항상 20억 이하의 정수가 되도록 입력이 주어집니다. 문제해결 1) 내 풀이 public static void main(String[] args) { Scanner sc = new Scanner(Syst..

그리디 - 1이 될때까지

문제 어떠한 수 N이 1이 될 때 까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 한다. 단, 두번째 연산은 N이 K로 나누어떨어질 때만 선택할 수 있다. 1. N에서 1을 뺀다. 2. N을 K로 나눈다. 예를 들어 N이 17, K가 4라고 가정하자. 이때 1번의 과정을 한 번 수행하면 N은 16이 된다. 이후에 2번의 과정을 두 번 수행하면 N은 1이 된다. 결과적으로 이경우 전체과정을 실행한 횟수는 3이된다. 이는 N을 1로 만드는 최소 횟수이다. N과 K가 주어질 때 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야하는 최소 횟수를 구하는 프로그램을 작성하시오 문제해결 1) 내 풀이 public static int hello(int n, int k) { int result = n..