[백준,BOJ 10814] 나이순 정렬(JAVA 구현,재풀이)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 정렬로 분류되어 있는 문제로 다른 정렬 문제들과 마찬가지로 풀면 되는데 처음에는 2차원 배열을 사용할 때 나이, 이름값뿐만 아니라 별도의 가입 순 값을 저장해서 나이가 같으면 해당 값을 기준으로 정렬을 수행한 결과를 제출했는데, 계속 오답처리가 나서 다른 분들의 풀이를 살짝 봤더니 문제점을 알았다.... -해법 우선 별도의 가입 순 데이터를 저장할 필요가 없는 게, 애초에 입력을 가입 순으로 한다고 명시되어 있기 때문에 결국 모든 데이터가 입력된 2차원 배열의 데이터들은 가입 순으로 정렬이 되어있는 것이나 마찬가지다. 그러므로 나이순으로만 정렬을 해준다면, 나이가 같을 경우 별도의 조작이 필요 없는 것이었다. import java.util.*; public class Main { public ..
[백준,BOJ 11651] 좌표 정렬하기 2(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 이번 문제는 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 구현, 재풀이)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 단계별 풀어보기에 정렬 카테고리로 분류되어있는 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 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 정렬 카테고리에 분류된 문제로 입력받은 정수 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 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 단계별 풀어보기에 정렬 카테고리로 분류되어 있는 통계학 문제이다. 문제를 읽었을 때 별도의 특별한 알고리즘은 필요없고 정렬을 잘 활용하여 메소드별로 구현하면 되겠다고 생각했다. -해법 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 2447] 별 찍기-10(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 솔직히 문제에 대한 이해는 어느정도 쉽다고 생각한다. 프렉탈 형태의 별들을 나눠서 생각해보면 규칙은 금방 찾을 수 있을 것이다. 그러나 재귀적으로 이를 구현하는데 있어서 너무 어려워 다른 분들의 코드를 많이 참고했으며, 완전히 이해되지 않았기 때문에 지속적으로 해설해봐야 할 것 같다고 생각한다. -해법 n으로 입력받은 3의 제곱을 이용하여 각 점에 맞게 위치를 움직이는게 중요한 것 같다. 예를들어 n이 3일 경우 별의 시작은 (0,0)부터이며, n이 9일 경우 시작은(0,0) , (0,3) , (0,6) , (3,0) , (3,3) , (3,6) , (6,0) , (6,3) , (6,6) 부터이다. 이와 같은 특징으로 3x3의 크기로 반복해서 출력한다고 생각하면 되는데 재귀 호출시마다 시작점으..
[백준,BOJ 1436] 영화감독 숌(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 반복문을 통해서 증가시키면서 확인하려고 했으며, 증가 값이 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 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 이 문제 역시 브루트 포스로 분류되어있는 문제로, 문제 자체의 이해는 완벽하다고 생각했다. 요약하자면, m*n 크기의 보드판이 있을 때, 8*8 크기의 체스판으로 뜯어 냈을 때 규칙에 맞추기 위해 칸의 색을 최소한으로 수정해야 한다는 소린데, 이 과정에서 개인적으로 간과한 부분이 바로 체스판의 (0,0)은 하얀색 또는 검은색으로 시작할 때 시작이 하얀색인 과정에서의 횟수와 검은색일 때 횟수 중 최솟값을 찾는 것이었다. 처음에 나는 보드에서 떼어낸 체스판의 시작만을 보고 규칙과 비교하여 횟수를 반환했는데, 그것이 아니라 체스판의 시작이 무엇이든 두 가지 규칙과 비교해봤어야 했다는 소리다. 말로 설명하기 굉장히 힘든데 예를들어 예제 입력 2에서 8x8의 크기로 체스판을 (0,0) ~ (10 - 8..
[백준,BOJ 7568] 덩치(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 브루트 포스 분류로 된 문제로 간단하게 요약해보자면, n명의 사람에게 몸무게와 키를 입력받고 다른 사람과 비교하여 자신보다 몸무게와 키가 큰 사람의 수 +1 이 자신의 등수가 되며 이를 공백을 기준으로 출력하는 문제이다. 배열에 저장해 정렬 라이브러리를 사용하면 쉬울 수 있지만, 브루트 포스 방식으로 모든 경우의 수를 따지기 위해 모든 비교를 수행하고자 했다. -해법 모든 사람과 비교하기 위해 반복문 2개를 중첩하였고, 각 경우의 수를 비교하여 자신보다 덩치가 큰 사람이 나올 때 마다 카운트하여 비교가 끝났을 때 +1 하여 자신의 등수를 결정한다. 코드를 보자. import java.util.*; public class Main { public static void main(String[] a..
[백준,BOJ 2231] 분해합(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 우선 알고리즘 공부를 시작하면서 자연수 n이 있을 때 각 자리수를 추출하는 방식은 공부했기 때문에 알고 있어서 푸는데 어려움은 없었다. 다만 반복문을 만들 때 범위를 어디까지 해야할까 생각해봤는데 자연수n의 범위가 1부터 1,000,000까지 였기 때문에 최소한 1,000,000을 넘는 생성자는 없다고 생각했다. 1,000,000의 경우에는 1,000,000+0+0+0+0+0+0+1 = 1,000,001이기 때문에 문제에서 주어진 자연수n의 범위를 초과하게 된다. -해법 비교적 간단하기 때문에 코드만 보고 이해가 가능할 것 같다. import java.util.*; public class Main { public static boolean create(int x,int n) { // 생성자를 ..