알고리즘 문제풀이 176

#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()..

오답노트 #17298 : 오큰수

풀이방법 및 문제점 2023.01.17 (1) 시간초과가 발생했다. 논리적 풀이 방식이 틀리지는 않은 것 같다. 모든 예제가 올바르게 해결되고, 하나하나 짚어보았을 때 논리적으로 오류가 있는 부분이 없어보인다. 시간초과가 발생한 것은 출력 수 하나마다 새 스택을 하나씩 만들어 푸는 방법을 택해서인 것 같다. 사용하는 스택의 개수를 줄이고, 무엇보다도 add()와 pop()의 수행 횟수를 최대한 줄여야 할 것 같다. 하나의 스택만 사용해서 푸는 방법이 있을까? 사용한 풀이방법은 다음과 같다. 1. 입력값은 1차원 정수 배열 original에 순서대로 저장한다. 2. 반복문에서, 0부터 N-1까지의 i에 대하여 다음과 같은 과정을 수행한다. stack을 새로 하나 만든다. boolean 값 check를 선언..

#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..