알고리즘 문제풀이/백준 158

#2587 : 대표값2

풀이방법 사용된 것: 수학 정렬 2023.03.12 다섯 개 수의 평균과 중앙값을 구해 화면에 출력한다. 코드 Java(2023.03.12) import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); //수를 담을 배열 선언 Integer[] nums = new Integer[5]; //5개 수의 합을 저장할 변수 선언 Integer sum = 0; //수 읽어와 저장 및 덧셈 for(int i=0; i

#10804 : 카드 역배치

풀이방법 사용된 것: 시뮬레이션 구현 스택 (Stack) 2023.03.12 1부터 20까지의 숫자가 적힌 카드 20장이 오름차순으로 정렬되어있는 상황이다. 시작 수와 끝 수를 입력하면, 그 구간 안의 카드들만 역순으로 배열하면 된다. 시작 수의 끝 수 쌍은 총 10번 주어진다. 보자마자 First In Last Out이라는 생각이 들어, 스택을 사용했다. 주어진 구간 사이의 수들을 순서대로 스택에 넣은 뒤, 스택에서 pop() 하며 수를 바꾸어준다. 이를 10번 반복한다. 코드를 편하게 짜기 위해, 길이가 20이 아닌 21인 배열을 선언하였다. 각 카드의 실제 순서와 배열 상의 인덱스가 서로 일치하도록 하기 위해서이다. 코드 Java(2023.03.12) import java.io.BufferedRea..

#2884 : 알람 시계

풀이방법 사용된 것: 수학 사칙연산 2022.03.15 이전에 풀었던 문제인데 블로그에 풀이를 적지 않았어서, 지금 남긴다. 덧셈과 뺄셈만 해주면 된다. 일단 주어진 분 값에서 45를 뺀다. 45를 뺐더니 0보다 작아졌다면, 시 값에서 1을 빼고 분 값에는 60을 더하여 올바른 시간 표기로 바꾸어준다. 그런데 주어진 시 값이 원래 0이었다면 위의 과정에서 시 값이 -1이 되어버린다. 따라서, 시 값이 음수일 경우 시 값에 24를 더해주는 작업을 해준다. 시 값과 분 값을 화면에 출력하면 문제가 해결된다. 코드 Java(2022.03.15) import java.util.Scanner; public class Main { public static void main(String[] args) { // TOD..

#5585 : 거스름돈

풀이방법 사용된 것: 그리디 2023.01.19 가장 큰 금액인 500엔 잔돈부터 가장 작은 금액인 1엔 잔돈까지 순서대로 각각 주어야 하는 개수를 구하면 된다. 줘야 하는 각 잔돈의 개수, 그 잔돈을 준 후 아직 더 주어야 하는 거스름돈의 양은 나누기 연산과 나머지 연산을 통해 구할 수 있다. 코드 Java(2023.01.19) import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner (System.in); //타로가 산 물건 가격 읽어오기 int n = sc.nextInt(); //줘야 하는 거스름..

#15649 : N과 M (1)

풀이방법 사용된 것: 백트래킹(backtracking) Deque 2023.01.17 숫자를 순서대로 하나 고르는 것을 한 번의 단계로 본다. 사전순 순서에 맞추어 숫자를 하나하나 고르면서, 백트래킹을 통해 모든 수열을 찾는다. 코드 Java(2023.01.17) import java.util.Deque; import java.util.LinkedList; import java.util.Scanner; public class Main { static StringBuilder sb; static boolean[] visited; public static void main(String[] args) { // TODO Auto-generated method stub sb = new StringBuilder()..

#1918 : 후위 표기식

풀이방법 사용된 것: Stack 2023.01.10 주어진 중위 표기식을 앞에서부터 한 글자씩 훑으면서, 이번 글자의 종류가 무엇인지에 따라 아래와 같은 작업을 수행해주면 문제를 풀 수 있다. 1. 이번 글자가 피연산자인 경우 이번 글자를 즉시 화면에 출력한다. 2. 이번 글자가 왼쪽 괄호인 경우 스택에 '('를 넣어준다. 3. 이번 글자가 오른쪽 괄호인 경우 스택의 top에 '(' 가 올라올 때까지 계속해서 pop()을 하여 하나씩 화면에 출력한다. 스택의 top에 '('가 올라왔다면 그 '('는 화면에 출력하지 않고 pop()만 해준다. 4. 이번 글자가 + 혹은 -인 경우 현재 스택이 비어있지 않다면, 스택이 비거나 top에 '('가 올라올 때까지 계속해서 pop()을 하여 하나씩 화면에 출력한다...

#10971 : 외판원 순회 2

풀이방법 사용된 것: 백트래킹 2022.11.29 오답노트 #10971 : 외판원 순회 2 풀이방법 및 문제점 2022.11.23 이번 문제도 작은 실수로 인해 틀렸던 문제이다. 백트래킹 문제를 풀 때 절대 잊으면 안 되는 사항이기 때문에 오답노트에 적어두려 한다. 재귀를 통해 각 도시를 방 blowupmomo.tistory.com 재귀를 통해 각 도시를 방문하다가, 모든 도시를 빠짐없이 방문한 것이 확인되면 출발지로 다시 돌아가는 비용을 현재까지 쌓인 비용에 더한 뒤 이번 여정의 최종 비용으로 결정한다. 단, 마지막으로 방문한 도시에서 출발지로 돌아가는 길이 없다면 이번 여정은 무효로 처리하고 정답에 반영하지 않는다. 그 다음 모든 최종 비용 값 중 최솟값을 화면에 출력하여 문제를 해결한다. 코드 Ja..

#4436 : 엘프의 검

풀이방법 사용된 것: 브루트포스 2022.11.22 오답노트 #4436 : 엘프의 검 풀이방법 및 문제점 2022.11.22 사용한 방법은 다음과 같다. 0부터 9까지의 숫자가 담겨있는 해시셋을 선언한다. 수열에 특정 숫자가 나타날 때마다 그 숫자를 해시셋에서 remove()한다. 해시셋이 텅 blowupmomo.tistory.com 0부터 9까지의 숫자가 저장된 HashSet을 선언한다. 각 숫자가 등장할 때마다 HashSet에서 그 숫자를 remove()한다. HashSet이 텅 비는 순간 현재의 k를 출력한다. 형변환의 번거로움을 줄이기 위해 각 숫자는 Character형으로 다루었다. 그리고 곱하기를 하다 보면 숫자가 점점 커지므로, 곱한 값은 반드시 충분히 큰 정수형 데이터로 선언해주어야 한다...