목록분류 전체보기 (150)
forDevLife
아래는 시간초과한 코드다. 매우 큰 수가 입력되어 결국엔 overflow로 인해서 정상적인 값이 나오지 않았고, Long으로 변경하자마자 시간초과 에러가 발생했다. 정석대로 이분 탐색으로 진행해야 한다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int N = Integer.parseInt(st.ne..
입력 시, 최대 높이를 받는다. 해당 높이부터 0까지 가장 짧은 시간을 구한 후, 마지막에 출력한다. import java.io.*; import java.util.*; class Answer { int time; int height; public Answer(int time, int height) { this.time = time; this.height = height; } } public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new Strin..
처음에는 그냥 단순히 큐로 구현했다. 역시나 풀리긴 하지만 시간 / 메모리를 좀 먹는 편. 아래는 큐가 아닌 LinkedList로 구현한 방법이다. idx가 움직이는 것을 다음과 같이 설명할 수 있다. 1. idx에 처음에 K-1만큼 더해준다. 우선 배열은 하나가 사라지면, 그 다음 걸 가리키게 되므로 한칸 내려서 더해준다. -1하지 않으면 원래 탐색 대상은 넘어가 버린다. 2. %= 연산을 통해 마치 실제로 큐에 계속 데이터를 넣는 것처럼 구현할 수 있다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = n..
브루트포스 - DFS로, 전체 겹치지 않는 부분집합(원소 3개)을 만들어 모두 비교해 봐야 한다. DFS를 통해 겹치지 않는 원소의 집합 찾는 방법은 항상 유용하니 외우자. import java.io.*; import java.util.StringTokenizer; public class Main { static int[] arr; static int[] tmp; static int max; static int M; public static void DFS(int L, int S) { if (L == 3) { int sum = 0; for (int i = 0; i < 3; i++) { sum += tmp[i]; } if(sum
- GCD -> 유클리드 호제법으로 풀 수 있다. 최대 공약수가 구해지면, 최소 공배수는 두 수의 곱 / 최대 공약수이다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.read..
- 이전에 소수 관련된 문제 - 에라토스테네스의 체 방식으로 문제를 풀었었다. - 이번에는 다른 방식으로 소수 판별을 진행했다. (참조 블로그 : https://st-lab.tistory.com/80) import java.io.*; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); StringTokenizer st = new StringTokeniz..
HashMap이 HashSet보다 결과는 더 빠른 것으로 보인다. 또한 일반 println -> bw.write를 했더니 훨씬 빨라짐을 확인했다.. 앞으로 이걸 쓰자. import java.io.*; import java.util.HashMap; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out..
lf, rf를 각각 맨 처음과 끝을 가리키도록 설정한다. lf = rf라면 팰린드롬이므로, yes를 출력한다. 0이 입력되면, main return으로 종료한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true..
- 방법 1 hashSet으로 입력되는 문자를 받은 후, 중복 제거해서 ArrayList에 넘긴다. 넘겨진 ArrayList를, compare를 override해서 정렬한 후 출력한다. - 팁1 : new ArrayList(hashSet)을 통해 해당 내용으로 ArrayList를 생성할 수 있다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader..
찾아보면 쉬운 문제라고 많이들 하시지만,, 나는 매우 시간이 오래걸렸다. 1. 8 x 8 보드를 W기준, B기준으로 2가지 우선 그려놓는다. 2. 입력된 보드를 8x8만큼 범위를 지정하고 이동하며, 위에서 기 작성된 ref 보드와 비교한다. -> White / Black 일 때 각각 다른 부분을 count 한 후, 작은 수를 리턴한다. 3. 리턴 된 값을 이전 범위 지정 시 최소값과 계속 비교해가며 갱신한다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int min_value..