문제 개요 원형으로 연속인 4개의 숫자가 주어졌을 때 시작위치를 변경해서 구할 수 있는 가장 작은 수인 시계수를 구하고 이 시계수가 모든 시계수 중 몇 번째로 작은 수인지 구하는 문제입니다. 문제 접근 가장 작은 시계수를 구하는 방법 가능한 조합의 수는 총 4개 밖에 없으므로 반복문을 통해 주어진 숫자들에서 가장 작은 시계수를 구할 수 있습니다. 몇 번째로 작은 시계수인지 확인하는 방법 처음에는 적절한 수식으로 나타내는 것이 맞다고 생각했는데, 마땅히 생각나지 않아서 해당 숫자가 시계수인지 여부를 확인하는 배열을 만들어서 사용해야 될 것 같습니다. 주어진 수가 시계수인지 확인하려면 다음 조건을 만족하면 됩니다. 4자리 수 x에 대해서 자리를 옮겼을 때 더 작지 않을 것 자리를 옮겼을 때 1000보다 작아..
문제 개요 주어지는 입력값에 대해 상태를 변경한 후 최종 결과물을 출력하는 문제입니다. 문제 접근 스위치 개수가 100개고 학생수가 100명인데 제한시간이 2초 이므로 100명이 모두 100번 바꾼다고 해도 충분히 문제 해결이 가능합니다. 단순 구현으로 생각하고 접근하였습니다. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { static int N; static Boolean[] status; static int students; static int[][] operations; private static..
문제 개요 한칸씩만 이동할 수 있는 좌석과 고정된 좌석이 존재할 때 가능한 모든 조합 수를 구하는 문제입니다. 문제 접근 방법의 가짓수가 최대 20억개이니 브루트 포스로는 해결할 수 없는 문제입니다. 또한 정수에 최대값이 존재하는 언어의 경우에는 이를 고려하여 타입을 설정해야 합니다. (Java의 경우에는 int) 보통 최대값이 매우 큰 문제는 수학적인 내용이 포함되어 있는 경우가 많기 때문에, 수학적으로 접근해보았습니다. VIP에 의해 분리되는 부분들은 각각 가능한 조합을 가질 수 있습니다. 예를 들어 예제로 주어진 123456789에서 4와 7이 VIP라면 다음과 같이 3개의 부분들로 나누어질 수 있습니다. (123) 4 (56) 7 (89) 각 부분들은 독립적이기 때문에 부분들마다 가능한 조합 수들..

서론 최근 TDD에 관심이 생겨서 JUnit을 공부하고 있던 중 알고리즘 문제 풀이에 이를 적용할 수 있겠다는 생각이 들었습니다. 그래서 처음에는 String[]에 입력값을 넣고 출력값을 무조건 String으로 저장하여 assertEquals로 확인하는 방법을 사용했습니다. 그런데 입력이나 출력값이 많아지면 많아질수록 테스트 코드에 값을 추가하는 과정이 힘들어지기 때문에 문제점을 해결하고자 했습니다. 그래서 일반적으로 문제풀이에서 입력과 출력에 대한 내용이 담겨 있는 .in, .out 파일을 통해 자신의 문제 풀이가 정확한지 테스트하는 방법을 구상하게 되었습니다. 본론 문제풀이 Class 구성 저는 문제를 풀 때 항상 다음과 같은 구조로 클래스를 정의합니다. public class Main{ privat..