자바

    [백준,BOJ 11651] 좌표 정렬하기 2(JAVA 구현)

    -내 생각 이번 문제는 11650인 좌표 정렬하기 문제에서 정렬 기준만을 변경한 것이므로 Comparator인터페이스 오버라이딩 부분만 수정해주면 간단하게 해결할 수 있었다. -해법 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n= sc.nextInt(); int arr[][]=new int[n][2]; for(int i=0;i

    [백준,BOJ 11650] 좌표 정렬하기(JAVA 구현, 재풀이)

    -내 생각 단계별 풀어보기에 정렬 카테고리로 분류되어있는 11650번 좌표 정렬하기 문제이다. 문제 자체의 이해는 어렵지 않고 기준에 따라 정렬해야 하기 때문에 Comparator 인터페이스를 오버 라이딩 후 재정의해 풀어야겠다고 생각했다. -해법 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n= sc.nextInt(); int arr[][]=new int[n][2]; //x좌표 y좌표 for(int i=0;i

    [백준,BOJ 1427] 소트인사이드(JAVA 구현)

    -내 생각 정렬 카테고리에 분류된 문제로 입력받은 정수 n을 각 자릿수로 구분하여 내림차순 정렬 후 출력하는 것이므로 크게 어려운 문제는 아니다. -해법 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ArrayList arrayList = new ArrayList(); int n= sc.nextInt(); while(n!=0) { arrayList.add(n%10);// 자리수 저장 n/=10; } Collections.sort(arrayList, Collections.reverseOrder()); //내림차순 정렬 for(int i=0;i

    [백준,BOJ 2108] 통계학(JAVA 구현)

    -내 생각 단계별 풀어보기에 정렬 카테고리로 분류되어 있는 통계학 문제이다. 문제를 읽었을 때 별도의 특별한 알고리즘은 필요없고 정렬을 잘 활용하여 메소드별로 구현하면 되겠다고 생각했다. -해법 import java.util.*; public class Main { static int avg(int[] arr) { //산술평균 메소드 double result =0; // 계산 후 반올림을 위해 double형 double sum=0; for(int x : arr) { // 모두 더한다. sum+=x; } result = Math.round(sum / arr.length); // 반올림 후 저장 return (int)Math.ceil(result); // int형으로 타입 캐스트 } static int mi..

    [백준,BOJ 1436] 영화감독 숌(JAVA 구현)

    -내 생각 반복문을 통해서 증가시키면서 확인하려고 했으며, 증가 값이 n%10 = 6인 경우, 예를 들어 6일 때는 66을 뒤에 붙이고 마지막 자리는 0~9를 채우는 식으로 하려고 했었는데, 너무 복잡한 방식이었다.... -해법 결국 문제에 답이 있었다. 666이라는 숫자는 무조건 연속해야 하기 때문에 단순히 숫자를 증가시키면서 666이 포함되어있는 경우에 입력받은 n을 감소시키면 되는 거였다... import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n= sc.nextInt(); int num=0; // 증가 숫자 while(n>0) { /..

    [백준,BOJ 1018] 체스판 다시 칠하기(JAVA 구현)

    -내 생각 이 문제 역시 브루트 포스로 분류되어있는 문제로, 문제 자체의 이해는 완벽하다고 생각했다. 요약하자면, m*n 크기의 보드판이 있을 때, 8*8 크기의 체스판으로 뜯어 냈을 때 규칙에 맞추기 위해 칸의 색을 최소한으로 수정해야 한다는 소린데, 이 과정에서 개인적으로 간과한 부분이 바로 체스판의 (0,0)은 하얀색 또는 검은색으로 시작할 때 시작이 하얀색인 과정에서의 횟수와 검은색일 때 횟수 중 최솟값을 찾는 것이었다. 처음에 나는 보드에서 떼어낸 체스판의 시작만을 보고 규칙과 비교하여 횟수를 반환했는데, 그것이 아니라 체스판의 시작이 무엇이든 두 가지 규칙과 비교해봤어야 했다는 소리다. 말로 설명하기 굉장히 힘든데 예를들어 예제 입력 2에서 8x8의 크기로 체스판을 (0,0) ~ (10 - 8..

    [백준,BOJ 7568] 덩치(JAVA 구현)

    -내 생각 브루트 포스 분류로 된 문제로 간단하게 요약해보자면, n명의 사람에게 몸무게와 키를 입력받고 다른 사람과 비교하여 자신보다 몸무게와 키가 큰 사람의 수 +1 이 자신의 등수가 되며 이를 공백을 기준으로 출력하는 문제이다. 배열에 저장해 정렬 라이브러리를 사용하면 쉬울 수 있지만, 브루트 포스 방식으로 모든 경우의 수를 따지기 위해 모든 비교를 수행하고자 했다. -해법 모든 사람과 비교하기 위해 반복문 2개를 중첩하였고, 각 경우의 수를 비교하여 자신보다 덩치가 큰 사람이 나올 때 마다 카운트하여 비교가 끝났을 때 +1 하여 자신의 등수를 결정한다. 코드를 보자. import java.util.*; public class Main { public static void main(String[] a..

    [백준,BOJ 1080] 행렬 (JAVA 구현)

    -내 생각 알고리즘 초보자로서 그리디 알고리즘에 진입하고 나서부터 무언가 굉장히 헷갈리고 자신감이 사라졌다.. 문제를 이해하는데 많은 시간이 걸리지 않았지만, 어떻게 해결해야 할지 너무 막막해서 곧장 다른 분들의 블로그를 통해 문제를 정확하게 이해할 수 있었다. 똑같은 크기의 2차원 배열 A, B가 일치할 때까지의 변환 연산의 횟수를 구하는 것이 핵심인데 변환 연산은 3X3의 고정된 크기로만 변환이 가능하다. 처음에 다른 블로거 분들의 설명을 봤을 때는 '왜 (0,0)부터 뒤집기 시작하지?' 생각했는데, 생각해보면 3X3으로 고정되어있기 때문에 뒤집은 똑같은 3X3의 공간을 다시 뒤집는 바보 같은 짓(정말 똑같은 공간, 걸치는 공간은 몇 번이든 뒤집어질 수 있다.)을 제외하면 결국에는 각 원소가 뒤집어 ..