반응형

전체 글 314

[백준]JAVA - 2636번: 치즈

https://www.acmicpc.net/problem/2638 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net 🔶 풀이 외부 공기와 접촉하고 있는 변이 2개 이상인 치즈는 1시간 뒤에 녹는다. "몇 시간 뒤에 치즈가 다 녹아서 없어질까?" 처음엔 치즈를 기준으로 bfs를 돌릴 생각으로 풀다가 시간을 많이 소비했다. 치즈가 아닌 공기를 기준으로 bfs를 돌려야 정답을 구할 수 있는데 문제는 외부 공기와 내부 공기가 나누어져 있다. (0, 0)부터 시작해서 bfs를 돌려준다. 내부 공기와 구분을 ..

오라클 여러 행을 하나의 컬럼으로 만들기 (LISTAGG) 오라클 11g R2 중복 제거

오라클에서는 여러 행으로 조회된 컬럼 값을 하나로 합쳐주는 함수가 있다. 오라클 9i 이하에서는 XMLAGG, 오라클 10g - 11g R1 에서는 WM_CONCAT, 오라클 11g R2 부터는 WM_CONCAT 함수를 사용할 수 없고, LISTAGG 함수를 사용하면 된다. 오라클 버전 함수명 ~ 9i XMLAGG 10g ~ 11g R1 WM_CONCAT 11g R2 ~ LISTAGG LISTAGG 함수는 그룹 함수이므로 GROUP BY 또는 PARTITION BY 절과 함께 사용해야한다. 또한, WM_CONCAT 함수처럼 DISTINCT를 사용할 수 없지만 정규식 함수를 사용하여 중복 제거를 할 수 있고, ORDER BY절로 정렬도 가능하다. 기본 문법 SELECT LISTAGG(합칠 컬럼명, 구분자)..

[백준]JAVA - 14499번: 주사위 굴리기

https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 🔶 풀이 모든 면이 0으로 채워진 주사위를 굴렸을 때 발생하는 일은 아래와 같다. 1. 이동한 칸에 쓰여 있는 수가 0인 경우, 주사위의 바닥면에 쓰여 있는 수를 복사한다. 2. 이동한 칸에 쓰여 있는 수가 0이 아닌 경우, 칸에 쓰여있는 수가 주사위의 바닥면에 복사되고, 칸은 0이 된다. 주사위는 지도의 크기에서 벗어날 수 없고,..

[백준]JAVA - 1966번: 프린터 큐

https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 🔶 풀이 Queue로 중요도만 체크해 주면 되는 간단한 문제다. 모든 문서를 FIFO 형식인 Queue에 입력해 놓고 중요도가 높은 것부터 순서대로 뽑아내면 된다. 언뜻 보면 정렬로 빠르게 뽑아낼 수 있을 것 같지만 중복된 중요도가 있을 수 있기 때문에 정렬로는 해결할 수 없다. 즉, Queue의 특성을 이용해서 해결해야 한다. 맨 앞에 있는 문서보다 중요도가 높은 문서가 있으면 맨 앞의 문서를 뒤로..

이클립스 오류 svn:E160024 Some of selected resources where not commited.

이클립스로 개발을 진행하면 svn을 사용해서 서로의 작업을 공유한다. 간혹 작업하는 과정에서 파일이 겹쳐서 충돌이 발생하게 되면 아래와 같은 에러로 인해 커밋이 안되는 경우가 있다. ✅ svn: E1600024: Commit failed 위 에러를 해결하기 위해선 'Override and Update...'를 진행해주면 된다. 충돌이 발생한 파일에 한해서 Override and Update를 진행하기 전에 본인이 했던 작업을 백업해두는 게 좋다. Update를 완료했다면 본인이 했던 작업을 덮어씌우고 Commit을 진행해주면 완료.

자바 Scanner vs BufferedReader 차이점

자바에서 문자열을 입력받는 대표적인 방법에는 Scanner와 BufferedReader가 있다. 오늘 두 개의 차이점에 대해서 알아보려고한다. 자바를 한 번이라도 접해봤으면 Scanner는 사용해봤을거라고 생각된다. 알고리즘을 풀어봤다면 BufferdReader 또한 사용해봤을것이다. 기본 문법 [Scanner] import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); System.out.println(input); } } JDK1.5부터 java.util 패키지에 포함된 클래스로 데이터를..

싱글톤 패턴(Singleton pattern) 이해하기 (사용하는 이유와 구현 방법)

싱글톤 패턴은 생성자가 여러 번 호출 되더라도 실제로 생성되는 객체는 하나이며 최초로 생성된 이후에 호출된 생성자는 이미 생성한 객체를 반환시키도록 만드는 디자인 패턴이다. 간단하게 설명하자면 단 하나의 인스턴스만 생성하여 사용하는 디자인 패턴을 의미한다. ✅ 디자인 패턴 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것을 의미함. 일종의 설계 기법으로 SW 재사용성, 호환성, 유지 보수성을 위함이다. ✅ 싱글톤을 사용하는 이유 객체는 생성할 때마다 메모리 영역을 할당받아야한다. 싱글톤을 사용하게 되면 한 번의 객체를 생성하기 때문에 메모리 낭비를 방지할 수 있다. 또한, 이미 생성된 인스턴스를 활용하기 때문에 속도 측면에서..

[백준]JAVA - 10431번: 줄세우기

10431번: 줄세우기 (acmicpc.net) 10431번: 줄세우기 초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1 www.acmicpc.net 풀이 "줄서기가 끝났을 때 학생들이 총 몇 번 뒤로 물러서게 될까?" 줄 서는 조건이 거창하지만 엄청 쉬운 문제였다. 반복문으로 앞에 키 큰 사람이 몇 명인지 세주면 간단하게 해결할 수 있다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedRea..

주소창에 구글, 네이버 등을 검색하면 어떤일이 벌어질까?

안녕하세요. N년차 웹 개발자입니다. 저는 웹 개발을 하면서 이 페이지가 어떻게 동작하는지에 대해서 알아야 된다고 생각합니다. 그렇다면 사용자가 주소창에 www.google.com 혹은 www.naver.com 을 입력하면 무슨 일이 발생할까요? 우리가 사는 집 주소가 존재하듯이 웹 브라우저도 주소가 있다. 모든 사람에게 '수원역 1번 출구'로 오세요. 라고 한다면 한 명도 빠짐없이 수원역 1번 출구로 올 것이다. 웹 브라우저도 google.com 혹은 naver.com 처럼 고유 주소가 존재하고 이것을 URL이라고 부른다. 웹 브라우저 동작 방식 1. 사용자가 google.com 을 검색 2. 웹브라우저는 캐싱된 DNS 기록들을 해당 도메인 주소와 대응하는 IP 주소를 확인 DNS는 웹사이트 이름과 I..

자바 카운팅 정렬 Counting Sort 계수 정렬 완벽 이해하기

카운팅 정렬 Counting Sort 카운팅 정렬은 시간 복잡도 O(n) 을 가지고 있기 때문에 많은 정렬 알고리즘 중에서 좋은 성능을 갖고 있다. 빠른 정렬 알고리즘에 속하는 퀵 정렬 (Quick Sort), 힙 정렬 (Heap Sort), 합병 정렬 (Merge Sort) 등의 평균 시간 복잡도가O(nlogn) 인 것을 보면 엄청난 속도를 가지고 있다는 것을 알 수 있다. 이처럼 빠른 속도를 가졌음에도 정렬이 필요한 상황에서는 퀵 정렬을 주로 사용한다. 그 이유에 대해서 알아보자. 정렬 과정 카운팅 정렬은 데이터 값이 몇 번 나왔는지 세주는 것이다. 정렬의 이름처럼 수를 counting 해주는 것. 다음과 같은 배열이 있다고 가정해보자. 1. 배열을 쭉 돌면서 해당 값을 index로 하는 새로운 배열..

반응형