본문 바로가기

반응형

컴퓨터

(71)
java - 백준 알고리즘 - 2751 수 정렬하기 2 이 문제는 BufferedReader , BufferedWriter를 사용하여 입력과 출력을 하고 Arraylist에 입력값을 받아 Collection.sort() 함수를 이용해 정렬을 해주면 된다. ( arr[] 배열을 이용한 후 Arrays.sort()를 이용하니 시간 초과가 났다. ) https://www.acmicpc.net/problem/2751 문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에..
java - 백준 알고리즘 - 11650 좌표 정렬하기 이 문제는 2가지 기준을 모두 만족하며 정렬을 하는 문제이다. ArrayList에 입력값을 담고 Collection.sort() 함수를 이용하고, Comparator를 override 하여 문제를 풀었다. https://www.acmicpc.net/problem/11650 문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. 출력 첫째 줄부터 N개의 줄..
코딩테스트를 위한 자바(java) 비트마스크 - 6 정수의 이진수 표현을 자료 구조로 쓰는 기법을 비트 마스크(bitmask)라고 부른다. 엄밀히 말하면 자료구조는 아니지만 코딩 테스트를 할 때 유용하게 사용 가능하다. 비트 마스크를 알기 전에 비트 연산에 대해서 알 필요가 있다. 비트 마스크를 이용하면 얻을 수 있는 장점이 3가지가 있다. 더 빠른 수행 시간 더 간결한 코드 더 작은 메모리 사용량 ex) { 1,3,5,7,9 }를 원소로 가지는 집합을 표현할 때 방법 1 : int[] arr = { 1,3,5,7,9 }; 방법 2 : 101010101(2) (비트마스크) N비트 일 때 오른쪽부터 순서대로 0번째 비트, 1번째 비트, 2번째 비트... N-1번째 비트 공집합 0 꽉 찬 집합 int full = (1
코딩테스트를 위한 자바(java) 비트연산 - 5 비트 마스크를 알기전에 미리 공부해야 할 비트연산에 대한 내용이다. 잘 숙지 해놓으면 비트 마스트를 이해하는데 도움이 될 것이다. 논리곱 AND & 두 비트가 모두 1일때 1을 반환 논리합 OR | 두 비트 중 하나라도 1이면 1을 반환 반전 ~ 비트가 1이면 0, 0이면 1을 반환 배타적논리합 XOR ^ 두 비트가 같으면 0, 다르면 1을 반환 오른쪽 시프트 연산자 >> 오른쪽으로 이동 후 왼쪽에는 0을 삽입 왼쪽 시프트 연산자 3);// 00010오른쪽으로 3칸 이동 // d == 2 byte a = 5; // 101 byte b = (byte) (a
java - 백준 알고리즘 - 15683 감시 이 문제는 N과 M의 크기, 감시카메라의 수가 최대 8개, 방향이 4개 밖에 없어 경우의 수가 크지 않을 것이라 생각하여 모든 경우의 수를 고려하는 브루트포스를 사용해서 풀었다. 문제를 푸는 생각의 과정은 이러하다. 1. 입력(arr배열)을 받으면서 카메라의 종류, 카메라의 x좌표, y좌표를 저장함. ( 인덱스 = 0~7 ) 2. 카메라의 종류, 위치 ,방향에 따라 배열의 값을 바꾸는 함수를 구현 ( 감시받고 있는 공간을 7로 저장함 ) 3. 1번에서 지정한 index에 따라 direction[ index ] 값을 바꾸어 방향으로 사용하였다. 4. 카메라가 3대 일 경우 direction[] 배열의 초기 상태는 { 1, 1, 0 } 이고 { 1, 1, 1 } -> { 1, 1, 2 } -> { 1, 1,..
코딩테스트를 위한 자바(java) 2차원 배열 입력받기 - 4 bfs, dfs 등의 문제를 풀다보면 2차원 배열형태로 입력을 받아야 할 경우가 자주 있다. 미로탈출과 같이 x, y 좌표를 사용하는 문제가 대표적이다. 입력이 공백없이 주어졌을때 편하게 입력 받을 수 있는 방법을 알게되어 공유하려고 한다. int형은 4바이트, char형은 2바이트를 사용하므로 공간복잡도상에서 이득을 얻을 수도 있다. 입력 : 7 8 a#c#eF.1 .#.#.#.. .#B#D### 0....F.1 C#E#A### .#.#.#.. d#f#bF.1 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class P1194 { static int N, M; static..
java - 백준 알고리즘 - 7569 토마토 https://www.acmicpc.net/problem/7569 이 문제는 https://www.acmicpc.net/problem/7576 이 문제와 유사한 문제이다. -> 풀이 : https://ckdgus.tistory.com/32 배열이 3차원으로 주어지는데 7576 문제에서 입력을 받는 것을 주의 한 후 변수, Queue, 배열을 3차원으로 바꿔주고 몇 줄만 추가해주면 정답을 얻을 수 있다. 코드를 보고 이해가 안된다면 7576 토마토 문제를 다시 풀어보는 것을 추천한다. 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자모양 상자의 칸에 하나씩 넣은 다음, 상자들을 수직으로 쌓아 올려서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 ..
java - 백준 알고리즘 - 7576 토마토 https://www.acmicpc.net/problem/7576 이 문제는 최소 날짜를 출력하는 문제이므로 bfs로 문제를 풀 수 있다. 기본적인 아이디어는 bfs를 이용하고, bfs를 시작하기 전 queue에 익은 토마토 좌표를 모두 넣는 방식을 사용했다. 토마토가 모두 익었는지 확인 하는 방법은 count 변수에 N*M을 넣고 arr 배열이 -1이거나 1일 때 , 0에서 1로 바뀔 때마다 -1을 해주었다. 자세한 설명은 코드에서 주석을 참고하면 좋을 것 같다. 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있..

반응형