알고리즘 문제풀이 176

#11723 : 집합

풀이방법 사용된 것: 구현 2023.09.20 실제로 Set을 선언하여 구현하면 시간초과가 발생한다. 이번에는 1차원 Boolean 배열을 사용하여 해결하였다. 후에 비트마스크를 사용해서도 시도해보겠다. 코드 Java(2023.09.20) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashSet; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ // TODO..

#18110 : solved.ac

풀이방법 사용된 것: 수학 구현 정렬 2023.09.20 의견의 개수 N이 0이라면, 0을 출력하고 프로그램을 종료한다. 의견의 개수 N이 1 이상이라면, 다음을 수행한다. N의 0.15배를 계산하여 이를 반올림한다. 이 결과를 M이라 하자. 모든 의견을 오름차순으로 정렬한 배열에서, 인덱스 M부터 N-M-1까지를 더한 후, 그 값을 2M으로 나눈 후 반올림한다. 코드 Java(2023.09.20) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { public static void main(String[] ar..

#5358 : Football Team

풀이방법 2023.09.05 주어진 문자열에서, i는 e로 바꾸고 e는 i로 바꾸고 I는 E로 바꾸고 E는 I로 바꾸어 출력하는 문제이다. 조건문을 사용하여 문자열의 모든 문자를 확인한 후, i, e, I, E에 해당하는 문자가 발견될 경우 변경하면 된다. 코드 Java(2023.09.05) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub BufferedReader br = new Buf..

#11279 : 최대 힙

풀이방법 사용된 것: 우선순위 큐 2023.05.17 자바의 PriorityQueue 클래스를 사용하면 되는 간단한 문제이다. 코드 Java(2023.05.17) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Collections; import java.util.PriorityQueue; public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub // 입력값을 읽어오기 위한 BufferedReader Buffere..

#14244 : 트리 만들기

풀이방법 2023.05.15 이해하기가 조금 어렵지만, 이해하고 나면 구현하기 매우 쉬운 문제이다. 트리를 구현할 필요는 없다. 트리의 개념을 잘 이해하기만 하면 간단한 반복문 및 조건문으로 해결할 수 있다. 푸는 방법은 여러 가지가 있는데, 내가 사용한 방법만 설명하겠다. 리프가 2개여야 하는 경우와 리프가 3개 이상이어야 하는 경우로 나누어서 풀었다. 먼저, 리프가 2개인 경우, 모든 노드가 일직선으로 연결되어야 한다. 사이클을 만들 수 없으므로 리프가 2개일 수 있는 경우는 딱 이 경우 하나밖에 없다. 리프가 3개인 경우 트리를 만드는 방법은 매우 다양해지는데, 여러 방법 중 내가 선택한 것은 다음과 같다. 0번 노드를 중심으로 두고, 필요한 리프 개수만큼의 노드를 0번 노드에 따로따로 연결해준다...

#24416 : 알고리즘 수업 - 피보나치 수 1

풀이방법 사용된 것: 재귀 DP (동적 프로그래밍) 2023.04.05 재귀는 함수를 정의하여 구현하였다. DP는 main 메소드 안에 반복문을 적어 구현하였다. 단, 피보나치의 특성상 DP를 수행하지 않고 주어진 n에서 2를 뺀 수를 출력해도 정답이다. 정수형 변수 a에 재귀함수의 수행횟수를 저장하고, 정수형 변수 b에 DP의 수행횟수를 저장하였다. 재귀의 경우, 최초에 함수를 한 번 실행하면서 실행하므로 일단 a에 1을 더하고 시작하였다. 그 후, 함수 안에서 재귀를 한 번 할 때마다 a를 1씩 증가시켰다. DP의 경우, 덧셈이 한 번 수행될 때마다 b를 1씩 증가시켰다. 코드 Java(2023.04.05) import java.util.Scanner; public class Main { static..

#2563 : 색종이

풀이방법 2023.03.19 도화지의 1x1 영역을 한 칸이라 생각해보자. 각 검은 색종이는 10x10 총 100칸을 차지한다. 주어지는 검은 색종이의 수는 최대 100장이다. 만약, 단순무식한 방법을 사용해서, 100장의 검은 색종이가 붙는 범위 총 10만 칸을 한 칸 한 칸 살펴서 정답을 알아낸다 해도, 우리는 (작은 상수) x 10만 번 정도의 연산만 하면 된다. 제한시간 내에 완료하기에 충분하고도 남는다. 그래서 그냥 단순무식한 방법으로 풀어보았다. 흰색 도화지의 어느 칸이 검은색으로 덮였고 어느 칸이 안 덮였는지 그 현황은 10x10 크기의 2차원 boolean 배열 plain에 저장하기로 하였다. 이 배열의 모든 칸의 초기값은 false이며 검은 색종이로 덮인 칸은 true, 덮이지 않은 칸은..

#10798 : 세로읽기

풀이방법 2023.03.19 입력값의 최대 크기가 최대 15글자씩 5개의 문자열로 매우 작기 때문에, 다음과 같이 단순무식한 방법으로 풀어도 시간초과가 나지 않는다. 먼저, 입력값을 저장할 Character 타입 2차원 배열을 행 5개, 열 15개의 크기로 선언한다. 그리고 입력값을 읽어오는데, 15글자 미만의 길이인 단어가 있을 경우, 그 단어가 끝난 후부터 15번째 글자까지를 알파벳과 숫자를 제외한 다른 글자로 채운다. 나는 '?'로 채웠다. 그 다음, 반복문을 통해 정답을 출력한다. 이때, '?'가 들어있는 부분을 무시해주고 출력한다. 코드 Java(2023.03.19) import java.io.BufferedReader; import java.io.IOException; import java.i..

#2490 : 윷놀이

풀이방법 2023.03.19 3줄의 입력값을 훑으면서, 각 줄마다, 0의 개수 혹은 1의 개수 중 한 가지만 센 후, 센 개수에 맞추어 switch-case 혹은 if문을 실행하면 된다. 코드 Java(2023.03.19) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub BufferedReader br = new Buffered..

#1427 : 소트인사이드

풀이방법 사용된 것: 정렬 2022.04.27 이 문제도 예전에 풀었던 문제인데 정리글을 적지 않았어서 지금 적는다. 수가 하나 입력값으로 주어진다. 그 수의 각 자리에 있는 숫자들을 내림차순으로 정렬하여 화면에 출력하는 문제이다. 이 문제는 두 가지 방법으로 풀 수 있다. 첫째는 입력값을 하나의 정수로 받아서 나머지 연산을 이용해 자릿수를 분리하는 방법, 둘째는 입력값을 charArray로 받아서 각각의 문자를 정수로 변환하는 방법이다. 아래 코드는 두 번째 방법을 사용한 정답코드이다. 먼저 주어진 각 자리수의 숫자들을 정수 데이터타입으로 변환하여 저장하였다. 나는 다음과 같이 하였다. 입력값이 띄어쓰기 없는 String으로 주어지므로, 일단 입력값을 char 배열로 변환한다. 배열의 길이는 입력된 수..