알고리즘 문제풀이 176

#10989 : 수 정렬하기 3

풀이방법 사용된 것: 정렬 2022.04.13 간단한 정렬 문제이다. Arrays.sort()를 사용하여 해결하였다. 코드 Java(2022.04.13) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //데이터 ..

#10828 : 스택

풀이방법 사용된 것: Stack switch-case 2022.04.12 간단한 스택 문제이다. switch-case문을 사용하여 풀었다. 코드 Java(2022.04.12) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Stack; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub BufferedReader br = new BufferedRea..

#1873 : 스택 수열

풀이방법 사용된 것: Stack 2022.04.12 스택이 무엇인지 알면 풀 수 있는 쉬운 문제이다. "NO"를 출력해야 하는 경우를 잡아내는 법을 생각해내기가 조금 어려울 수 있는데, 해결법은 다음과 같다. 이번에 수열에 추가되어야 하는 숫자가 스택에 들어있지만 top에 있지는 않은 경우, 바로 모든 것을 관두고 "NO"를 출력하면 된다. 같은 숫자를 두 번 add할 수는 없으므로, 스택의 깊은 곳에 들어가 있는 그놈을 무조건 꺼내야 수열에 추가할 수 있다. 그런데 그 숫자를 꺼내어 수열에 추가하려면 그 숫자보다 더 top에 가까운 수들을 먼저 pop해야만 한다. pop되는 수는 무조건 수열에 추가되어버린다. 즉, 엉뚱한 수가 수열에 추가되게 된다. 그러므로 이번에 pop해야 하는 수가 스택의 top이..

#10814 : 나이순 정렬

풀이방법 사용된 것: 정렬 2022.04.11 간단한 정렬 문제이다. Comparator Overriding으로 풀면 된다. 코드 Java(2022.04.11) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub BufferedReade..

#1920 : 수 찾기

풀이방법 사용된 것: HashSet 2022.03.10 처음에 주어지는 집합의 수들을 모두 HashSet에 저장한다. 두 번째 집합의 수들이 HashSet에 들어있는지 각각 하나씩 contains()로 판별한다. 코드 Java(2022.04.10) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashSet; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException{ // TODO Auto-generated meth..

#10250 : ACM 호텔

풀이방법 사용된 것: 수학 2022.04.06 오답노트 #10250 : ACM 호텔 풀이방법 및 문제점 2022.04.06 주어진 예제에 올바른 답을 출력하는 코드(코드 A)는 쉽게 짤 수 있었다. 그러나 제출을 하면 틀렸다는 결과가 나왔다. 예외의 경우를 고려하지 못한 것이다. 아직도 blowupmomo.tistory.com 간단한 수학 문제이다. 나눗셈의 몫과 나머지를 활용하면 된다. 단, 나머지가 0인 경우와 그렇지 않은 경우를 나누어 생각해야 한다. 문제에서는 층 수(h), 한 층에 있는 방 개수(w), 방을 배정받을 고객의 순번(n)이 주어진다. n번째 고객이 들어갈 방의 호수를 출력해야 한다. w는 필요가 없다. h와 n만 가지고 계산하면 된다. 먼저, n%h를 한다. n%h의 값이 0인 경우..

오답노트 #10250 : ACM 호텔

풀이방법 및 문제점 2022.04.06 주어진 예제에 대하여 올바른 답을 출력하는 코드(코드 (1))는 쉽게 짤 수 있었다. 그러나 제출을 하면 틀렸다는 결과가 나왔다. 예외의 경우를 고려하지 못한 것이다. 아직도 수면패턴이 들쑥날쑥해서(빨리 고쳐야 한다...) 머리가 멍했기 때문에 내 손으로 반례를 찾기가 너무 귀찮았다. 그래서 그냥 즉시 질문 게시판으로 달려갔다. 나와 비슷한 수많은 사람들의 흔적이 있었고, 반례 하나를 금방 찾을 수 있었다. 첫 반례를 찾은 게시글 링크 일단 위 게시글에 있던 1 1 20 20 이 테스트케이스를 넣어보았더니 '120'호가 당연히 정답인데 '021'이라는 터무니없는 결과가 나왔다. 그래서 나는 내가 층이 하나 뿐인 경우를 고려하지 못하여 틀렸다고 생각했다. 층이 하나 ..

#2631 : 줄세우기

풀이방법 사용된 것: 다이나믹 프로그래밍(DP) 2022.04.05 가장 긴 증가하는 수열의 길이를 구한다. 전체 아이 수에서 해당 수열의 길이를 빼주면 정답이다. 가장 긴 증가하는 수열의 길이를 구할 때에 DP가 사용된다. 예를 들면 다음과 같다. 3 7 5 2 6 1 4 위 수열에서 가장 긴 증가하는 수열은 3 7 5 2 6 1 4 {3, 5, 6}으로 길이가 3이다. 이 수열에 포함되어있지 않은 7, 2, 1, 4의 자리를 옮겨주어야 하므로 4명의 아이들이 자리를 옮겨야 한다. 따라서 답은 4이다. 코드 Java(2022.04.05) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ..

#9656 : 돌 게임 2

9656번: 돌 게임 2 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net 풀이방법 사용된 것: 다이나믹 프로그래밍(DP) 수학 DP로 풀 수도 있고, 수학적으로 증명하여 풀 수도 있는 문제이다. 아래는 수학적 증명을 통해 문제를 풀어낸 과정이다. 2022.04.04 어떻게 풀지 고민하던 중, 카테고리가 DP라는 것을 발견했다. DP 문제의 풀이를 도저히 모르겠을 때 꿀팁이 있다. 펜과 종이를 꺼내서 첫 몇 개의 경우의 수를 직접 계산해 보는 것이다. 그럼 데이터의 규칙성이 눈에 띄게 된다. 이 규칙성을 이용해 점화식을 세우면 DP식 해결법을 찾아낼 수 있다. DP는 노가다가 통한다는 점이 참 좋은 것 같다. 그래서 돌멩이 한 개의 경우부터 열 개의 경..

#2941 : 크로아티아 알파벳

풀이방법 2022.04.02 조건문을 사용하여 풀면 되는 문제이다. 한 글자 당 count 변수를 1씩 늘려주되, 크로아티아 특수문자에 해당하는 글자가 있다면 인덱스를 조정하여 한 글자 혹은 두 글자를 건너뛰어주면 된다. ArrayIndexOutOfBounds 오류가 발생하지 않도록 신경 써야 한다. 코드 Java(2022.04.02) 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 Bu..