11650번의 반대버전. 따로 설명이 필요 없을듯 하다. 그냥 리턴하는 값만 바꾸면 된다. import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); int[][] arr=new int[n][2]; for(int i=0;i{ if(x1[1]==x2[1]) return x1[0]-x2[0]; else return x1[1]-x2[1]; }); for(int i=0;i
이번 문제를 통해 자바 기본기를 확실히 가져야겠다는 생각이 들었다. 정확히 어떤 메소드가 어떤 역할을 하고 어떤것을 리턴하는지 등등.. 이 문제는 x값을 기준으로 정렬을 하되, x값이 동일하면 y값 순서대로 오름차순으로 정렬하는 문제다. 처음에는 x와 y를 변수로 가지고있는 class를 만들어서 정렬을 했다. 그럴경우 정렬 알고리즘을 통해 정렬을 했어야 했는데, 퀵, 힙정렬등을 적용시켜봤지만, 전부다 시간초과가 떴다. 따라서 다른 정렬방법이 필요했는데, Comparator를 사용해서 정렬을 했다. Comparator은 sort에서 정렬을 할때 사용하는데, 어떤식으로 정렬을 할지 사용한다. Comparator은 두개의 객체를 받고, 정수를 리턴한다. 리턴값이 음수,0일경우에는 두개를 바꾸지 않고, 양수일경..
수를 입력받고, 그 수를 내림차순으로 정렬하면 되는 문제. 수를 정렬하려면, 각 숫자를 나눠야 하는데, 정수형은 일일히 나누려면 각 자릿수로 나눠야 하기에 String형태로 받고, split로 나눈후, 다시 정수형으로 변환 후 정렬을 해주었다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Collections; public class Main { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedRea..
보기엔 쉬워보였지만 막상 풀어보니 최빈값 구하는데 시간이 매우 많이 들었다. 산술평균은 Math.round()를 써서 반올림을 했다. 최빈값을 제외한 나머지는 정렬해서 정렬하 위치에 값에 따라 계산을 해 풀었다. 이 문제의 핵심인 최빈값은 다른 풀이들은 모두 int형 8001개의 배열에 각 index에 해당하면 값을 +1씩 해주는 식으로 풀었지만, 나는 그게 웬지 싫어서 다른방식으로 풀어보았다. 백준에서는 시간오버가 뜨긴 했지만 작동은 잘 되긴 한다. 최빈값 풀이 방법 배열 list가 있다고 하자 1 3 6 3 2 4 1) 이 배열을 Arrays.sort(list)로 정렬 1 2 3 3 4 6 2) 정렬을 한 후 중복되지 않는 수의 배열과 해당 수들에 개수의 배열을 만든다. num_list count_l..
입력된 수를 정렬하기만 하면 되는 간단한 문제. 버블정렬, 힙정렬, 삽입정렬, 합병정렬등 여러가지가 있지만, stream을 사용해 정렬을 해보았다. stream을 사용하면 원본은 변하지 않는다. import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); int[] list=new int[n]; for(int i=0;i
처음 봤을때는 그냥 n-1에 1000을 곱하고 666을 더하면 안되나 생각했지만, 예외가 있다. 1666,2666,3666일때는 그냥 1000만 더해주면 되지만 끝자리가 666이 아닐때, 즉 6660이거나 16660일때는 6661,6662,6663...이 순서로 적용된다. 따라서 이런 상황일때를 고려해 코드를 짜야한다. 가장 간단한 방법은 1씩 더해서 그 더한 값에 666이 포함되어있으면 카운트를 올리고, 카운트가 n과 같아진다면 출력하는 방법이 가장 간단하다. 하지만 시간이 오래 걸린다. 일단은 가장 간단한 방법으로 풀어보았다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sca..