Java/Algorithms

문제 방에 주어진 방 번호에 맞게 번호표를 붙이려할 때 필요한 번호표 세트의 최소값을 구해야 한다. 하나의 번호표 세트에는 0부터 9까지 각 하나씩 번호표가 있고 6과 9는 뒤집으면 같은 경우니 같은 숫자라고 취급한다. 접근 방식 6과 9를 제외한 다른 값들은 세트 당 하나씩만 포함하니 여러개인 경우 그만큼 세트가 필요함 6과 9는 같은 숫자로 취급하여 2개 당 세트 하나로 처리 가능 6과 9를 제외한 각 숫자의 등장 빈도(max)와 6과 9의 등장 빈도를 합한 값(sixAndNine)을 구한다. max * 2가 sixAndNine보다 작으면 필요한 세트의 기준이 6과 9의 등장 빈도가 되고 같거나 작다면 max가 기준이 된다. 풀이 public class Main { public static void ..
문제 숫자 a, b, c를 입력 받아 세 수를 모두 곱한 결과에 0부터 9까지의 숫자가 각각 몇 번 등장하는지 출력하는 문제다. 접근 방식 이전 글에서 풀어봤던 방식처럼 각 수의 등장 횟수를 저장할 배열을 만들면 된다. 계산 결과를 문자열로 만들고 반복문을 돌면서 해당하는 숫자의 인덱스에 1씩 더 해주기만 하면 된다. 풀이 public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); int b = scanner.nextInt(); int c = scanner.nextInt(); String result = String.valueOf(a..
[실전 알고리즘] 0x03강 - 배열 안녕하세요, 바킹독입니다.. 저번 단원의 내용인 코드 작성 요령 II는 순한 맛이었는데 오늘건 그냥 단맛입니다. 난이도가 굉장히 낮으니 긴장 푸시고 강의로 들어가겠습니다. 목차는 따로 설명 blog.encrypted.gg 해당 블로그 내의 강의를 자바 언어로 풀면서 학습한 내용을 정리하고 있습니다. int[] numbers = {1, 23, 53, 77, 60}; 우선 0 ~ 100까지의 숫자를 랜덤으로 가진 배열이 주어진다. 주어진 배열에서 두 수를 더해 합이 100이 되는 경우가 존재하면 1, 존재하지 않으면 2를 출력하는 문제로 가장 단순하게 생각하면 배열의 특정 요소와 나머지 요소를 모두 번갈아가며 비교하여 100이 되는 경우가 있는지 확인하는 방법이 있다. ..
현재 위치 1을 포함하여 N까지 가기 위한 최단 경로를 구하는 문제다. 벌집은 6각형으로 이루어져있으니 밖으로 한 층 나갈 때마다 6의 배수만큼 방의 개수가 증가한다 아래와 같이 방의 개수가 증가한다. 1 + 6 = 7 7 + 12 = 19 19 + 18 = 37 ... 즉 최단 경로만 구하면 되는 문제이기 때문에 한 층씩 나갈 때마다 현재 층에 N이라는 방이 있는지 확인만 하면 된다. public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); int now = 1; int count = 1; while (now < n) { now += 6 * count..
핵심 키워드 동전, 최소 문제 요약 손님에게 거스름돈을 줄 때 동전의 개수를 최소로 하는 경우를 계산 그러기 위해선 가장 큰 단위의 동전부터 계산해야 함 문제 풀이 public class Main { public static void main(String[] args) { int[] charges = {25, 10, 5, 1}; String[] count = new String[4]; Scanner s = new Scanner(System.in); int test = s.nextInt(); for(int i = 0; i < test; i++) { int cent = s.nextInt(); count[0] = String.valueOf(cent/charges[0]); cent%=charges[0]; cou..
https://www.acmicpc.net/problem/2903 2903번: 중앙 이동 알고리즘 상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다. www.acmicpc.net 정사각형의 각 변의 중앙에 점을 하나 추가한다. 정사각형의 중심에 점을 하나 추가한다. 정사각형에 위의 중앙 이동 알고리즘을 n번 적용하였을 때 추가된 점의 개수를 중복 없이 구하는 문제다. 개인적으로는 문제의 이해보다는 그림을 보고 규칙을 찾아서 풀었다. 주어진 그림 예시를 살펴보다 보니 한 줄의 사각형의 수는 이전 사각형의 개수의 2배로 증가하는 규칙이 있다. 중앙 이동 알고리즘을 적..
n개의 문자열 입력에 대한 그룹 단어 체크 프로그램 작성하기 (각각의 문자열은 소문자로만 구성되고 중복되지 않으며 최대 길이는 100) 그룹 단어의 조건 각각의 알파벳은 연속되게 하나 이상 존재할 수 있다. 연속되지 않고 끊어져서 동일한 알파벳이 존재할 수는 없다. "aabbaa" 같은 경우는 그룹 단어가 아니다. "aabbcc" 같은 경우는 그룹 단어가 맞다. 나의 풀이 public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); int count = 0; for (int i = 0; i < n; i++) { String str = s.next(); St..
da9dac
'Java/Algorithms' 카테고리의 글 목록 (22 Page)