백준/JAVA
[백준/JAVA] 18870번 좌표 압축
좌표 압축 https://www.acmicpc.net/problem/18870 1. 문제 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자. 2. 문제 접근 1) 첫째 줄에 좌표의 개수 N을 입력받는다. 2) N만큼 좌표를 입력받아서 배열에 저장한다. 3) 정렬되기 전의 배열이 후에 필요하기 때문에 배열을 하나 복사하여 만들어둔다. 4) 병합정렬을 이용하여 배열을 정렬한다. 5) 해쉬맵을 이용하여 정렬된 수와 해당하는 인..
[백준/JAVA] 10814번 나이순 정렬
나이순 정렬 https://www.acmicpc.net/problem/10814 1. 문제 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 2. 문제 접근 1) 첫 째 줄에 회원의 수 N을 입력받는다. 2) 나이순으로 정렬을 하기 때문에 나이 범위에 해당하는 String 배열을 생성한다. 3) N만큼 반복하여 회원의 나이와 이름을 입력받는다. 4) 이 때, 회원의 나이에 해당하는 인덱스를 검사한다. 해당 인덱스의 값이 null일 경우 String객체를 하나 생성하여 입력받은 값을 넣는다. null이 아닐 경우 배열의 String 뒤에 입력받은 값을 붙여 넣는..
[백준/JAVA] 11650번 좌표 정렬하기
좌표를 정렬하는 문제 https://www.acmicpc.net/problem/11650 1. 문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 2. 문제 접근 1) 점의 개수 N을 입력받는다. 2) N만큼 좌표를 입력받는다. 3) 두가지 방법으로 정렬을 해볼 예정이다. 3-1) 병합정렬을 진행하되 병합과정에서 병합하려는 두 배열의 X좌표를 먼저 비교하고 만약 같을 시 Y좌표를 비교하는 방법을 사용한다. 3-2) X좌표와 Y좌표를 입력받을 때, X좌표와 Y좌표의 가중치를 다르게 하여 저장한다. -X좌표는 일반적인 정수로, Y좌표는 소수로 변환하여 두 개를 더하여 저장! 3. 코드 1) 병합정..
[백준/JAVA] 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰
https://www.acmicpc.net/problem/3003 1. 문제 동혁이는 오래된 창고를 뒤지다가 낡은 체스판과 피스를 발견했다. 체스판의 먼지를 털어내고 걸레로 닦으니 그럭저럭 쓸만한 체스판이 되었다. 하지만, 검정색 피스는 모두 있었으나, 흰색 피스는 개수가 올바르지 않았다. 체스는 총 16개의 피스를 사용하며, 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성되어 있다. 동혁이가 발견한 흰색 피스의 개수가 주어졌을 때, 몇 개를 더하거나 빼야 올바른 세트가 되는지 구하는 프로그램을 작성하시오. 2. 문제 접근 1) 기존의 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수를 배열에 저장한다. 2) 동혁이가 찾은 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수를 입력받는다. 3)..
[백준/JAVA] 1427번 소트인사이드
숫자를 정렬하는 문제 https://www.acmicpc.net/problem/1427 1. 문제 배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자. 2. 문제 접근 1) 정렬하려는 수 N을 문자열로 입력받는다. 2) 숫자를 저장할 수 있는 10의 크기의 정수형 배열을 만든다. 3) 문자열의 문자 수만큼 반복하며 charAt()을 통해 각 문자를 접근하며 해당하는 숫자을 인덱스로 하여 배열의 값을 1씩 증가시킨다. 4) 배열을 인덱스 9부터 시작하여 0까지 해당 값이 0이 될때까지 인덱스값을 출력한다. 3. 코드 import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedR..
[백준/JAVA] 10989번 수 정렬하기3
수의 범위가 작다면 카운팅 정렬을 사용하여 더욱 빠르게 정렬할 수 있습니다. https://www.acmicpc.net/problem/10989 1. 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 2. 문제 접근 1) 수의 개수 N을 입력받는다. 2) N만큼 반복하면서 정수를 입력받고 이때 max 변수를 이용하여 입력받는 정수의 최대값을 저장한다. 입력받은 정수를 배열에 저장한다. 3) 카운팅 정렬을 이용하여 새로운 배열에 값들의 위치에 대한 index를 저장한다. 4) 새로운 배열을 이용하여 입력받은 정수를 출력한다. 카운팅 정렬 : 카운팅 정렬은 각 배열 원소끼리 직접 비교하는 것이 아닌, 인덱스를 갖고 위치를 찾아나가는 정렬 알고리즘. 3. 코드 import ja..
[백준/JAVA] 2751번 수 정렬하기2
시간 복잡도가 O(nlogn)인 정렬 알고리즘으로 풀 수 있습니다. 예를 들면 병합 정렬, 힙 정렬 등이 있지만, 어려운 알고리즘이므로 지금은 언어에 내장된 정렬 함수를 쓰는 것을 추천드립니다. https://www.acmicpc.net/problem/2751 1. 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 2. 문제 접근 1) 수의 개수 N을 입력받는다. 2) N만큼 반복하며 정수를 입력받고 이를 배열에 저장한다. 3) 배열에 저장된 수들을 병합정렬을 이용하여 오름차순으로 정렬한다. 4) 정렬된 배열을 출력한다. 병합정렬 리스트 길이가 0 또는 1이면 이미 정렬된 것으로 간주. 정렬 되지 않은 리스트는 절반으로 나누어 2개의 리스트로 분할한다. 각 부분 리스트를 ..
[백준/JAVA] 2750번 수 정렬하기
시간 복잡도가 O(n²)인 정렬 알고리즘으로 풀 수 있습니다. 예를 들면 삽입 정렬, 거품 정렬 등이 있습니다. https://www.acmicpc.net/problem/2750 1. 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 2. 문제 접근 1) 수의 개수 N을 입력받는다. 2) N만큼 반복하며 수를 입력받고 이를 배열에 저장한다. 3) 선택정렬을 이용하여 배열을 오름차순으로 정렬한다. 4) 정렬된 배열을 출력한다. 선택정렬 : 주어진 데이터를 기준으로 사용자가 정한 기준에 맞는 최소값을 찾고 배열의 맨 앞의 값과 위치를 바꾸면서 정렬. 참조 : https://velog.io/@agfalcon/%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%AC 3..