반응형

전체 글 314

자바 Comparable과 Comparator 차이점

Comparable과 Comparator 은 인터페이스 (interface) 다. 그렇기 때문에 Comparable 과 Comparator 을 사용하기 위해서는 인터페이스 내에 선언된 메소드를 필수적으로 재정의해야한다. 두 개의 인터페이스는 알고리즘을 풀어보면서 자주 언급했던 부분이다. 실제로 알고리즘과 별개로 꼭 알아두어야하는 인터페이스 중 하나이므로 기억해주는 게 좋다. Comparable 해당 인터페이스에는 compareTo(T o) 메소드 하나가 선언되어있다. 즉, Comparable 인터페이스를 사용하기 위해서는 compareTo(T o) 메소드의 재정의가 필수다. Comparator 해당 인터페이스에는 많은 메소드가 선언되어있다. 하지만 필수로 재정의 해주어야하는 건 compare(T o1, ..

[백준]JAVA - 7568번: 덩치

https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 풀이 브루트포스를 이용해서 푸는 문제다. '각 사람의 덩치 등수는 몇 등인가?' 문제에서의 덩치가 큰 기준은 키와 몸무게가 모두 비교하는 대상보다 클 경우다. 키와 몸무게를 담을 수 있는 배열을 생성 후에 2중 for문을 이용해서 본인을 제외한 모두와 비교하여 rank 값을 출력해줬다. 문제에서 rank는 본인보다 덩치가 큰 사람 수 + 1 이기 때문에 rank 변수는 1로 초기화해주..

[백준]JAVA - 2116번: 주사위 쌓기

https://www.acmicpc.net/problem/2116 2116번: 주사위 쌓기 첫줄에는 주사위의 개수가 입력된다. 그 다음 줄부터는 한 줄에 하나씩 주사위의 종류가 1번 주사위부터 주사위 번호 순서대로 입력된다. 주사위의 종류는 각 면에 적혀진 숫자가 그림1에 있는 www.acmicpc.net 풀이 주사위 면은 총 6개, 주사위 개수는 최대 10,000개이므로 완전 탐색으로 진행해도 시간제한에 지장이 없다. 주사위 면을 A, B, C 대신 인덱스로 표현하면 아래와 같다. 위 문제의 조건은 아래층 주사위의 윗면과 위층 주사위의 아랫면의 숫자가 같아야한다. 가장 바닥에 올 수 있는 면은 6개의 면 중에서 한 개이므로 1-6까지 반복문을 돌리면서 찾아주면 된다. 아랫면이 정해지면 주사위 맞은 편인..

오라클 ORA-06533: 첨자가 개수를 넘었습니다.

오라클 프로시저, 함수를 호출할 때 주로 발생하는 에러로 프로시저 혹은 함수 내에서 Array (배열) 변수를 사용할 때, 주어진 크기를 넘어섰을 경우에 발생한다. DECLARE TYPE ARR_A IS TABLE OF VARCHAR2(5); ARR_B ARR_A; BEGIN ARR_B := ARR_A('A', 'B', 'C', 'D', 'E'); // 맨 마지막 요소 2개 삭제 ARR_B.TRIM(2); DBMS_OUTPUT.PUT_LINE(ARR_B(1)); // A DBMS_OUTPUT.PUT_LINE(ARR_B(2)); // B DBMS_OUTPUT.PUT_LINE(ARR_B(3)); // C DBMS_OUTPUT.PUT_LINE(ARR_B(4)); // 삭제된 데이터 (D) EXCEPTION W..

[백준]JAVA - 10800번: 컬러볼

https://www.acmicpc.net/problem/10800 10800번: 컬러볼 첫 줄에는 공의 개수를 나타내는 자연수 N이 주어진다(1 ≤ N ≤ 200,000). 다음 N개의 줄 중 i번째 줄에는 i번째 공의 색을 나타내는 자연수 Ci와 그 크기를 나타내는 자연수 Si가 주어진다(1 ≤ Ci ≤ N www.acmicpc.net 풀이 공의 색깔과 크기를 비교해서 i번째 공으로 잡아먹을 수 있는 공들의 크기 합을 구하는 문제이다. 완전 탐색으로 접근하면 공의 개수가 200,000까지의 크기를 가지므로 시간 초과가 발생할 것이다. 따라서 위 문제는 누적합과 정렬을 이용해서 해결해야한다. 누적합을 사용하기 위해서는 공의 크기가 작은 순으로 정렬을 해주어야한다. public static class B..

알고리즘/정렬 2023.01.30

오라클 cmd에서 사용자 계정 생성 및 권한 부여 방법

안녕하세요. 오늘은 명령 프롬포트 (cmd) 창에서 사용자 계정을 생성하고 권한을 주는 방법에 대해서 알아보겠습니다. 사용자 계정 생성하는 방법 1. 명령 프롬포트 (cmd)에서 sqlplus에 관리자로 접속한다. sqlplus "/as sysdba” 위 명령어로 접속이 되지 않는다면 sqlplus를 입력 후에 user-name에 sys as sysdba 를 입력하고, password는 입력하지 않고 엔터를 입력하면 된다. 2. 계정 생성 CREATE USER [ID] IDENTIFIED BY [PW]; ORA-65096: 공통 사용자 또는 롤 이름이 부적합합니다. 그대로 작성했는데 에러가 발생한다. 정상이다. 에러가 발생하지 않는 분들도 오라클 버전의 문제로 오라클 12c 기준으로 아래 버전은 에러가 ..

[백준]JAVA - 2564번: 경비원

https://www.acmicpc.net/problem/2564 2564번: 경비원 첫째 줄에 블록의 가로의 길이와 세로의 길이가 차례로 주어진다. 둘째 줄에 상점의 개수가 주어진다. 블록의 가로의 길이와 세로의 길이, 상점의 개수는 모두 100이하의 자연수이다. 이어 한 줄 www.acmicpc.net 풀이 동근이의 위치와 각 상점 사이의 최단 거리의 합을 구하면 된다. 해당 문제에서 동근이가 상점으로 갈 수 있는 경로는 시계 방향, 반시계 방향 2가지가 존재한다. 동서남북으로 이루어진 직사각형 모양의 맵을 일직선으로 가정하고 풀면 쉽게 해결할 수 있다. 좌측 상단(0, 0) 부터 시작해서 시계방향으로 이어서 일직선으로 생각해준다. 일직선으로 가정했다면 최단 거리를 계산할 때 쉬워질 수 있다. 동근이..

[백준]JAVA - 2239번: 스도쿠

https://www.acmicpc.net/problem/2239 2239번: 스도쿠 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다 www.acmicpc.net 풀이 어린 시절에 많이 풀었던 스도쿠가 보이길래 한 번 풀어봤다. 문제의 조건은 우리가 알고 있는 스도쿠와 동일하다. 각 행과 열에 중복되지않은 9개의 숫자(1-9)가 존재해야 한다. 3x3 크기의 박스에 중복되지않은 9개의 숫자(1-9)가 존재해야 한다. 스도쿠에서는 위 두 가지 조건만 신경써주면서 빈칸에 1-9를 넣어주는 dfs를 돌려주면 된다. 하지만 dfs만 계속 돌리면 시간 초과가 ..

자바 오류 source release 11 requires target release 11 해결

java: warning: source release 11 requires target release 11 프로젝트를 생성했을뿐인데 발생하는 에러다. Project SDK가 build.gradle에 적힌 버전과 맞지 않아서 발생하는 에러로 쉽게 해결할 수 있다. group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' build.gradle 파일을 보면 sourceCompatibility 를 볼 수 있다. "Java 11 버전을 쓰겠다." 라는 뜻이다. Project SDK 확인하는 방법 1. File > Project Structure에 들어간다. 2. Project Settings > Project 목록에 SDK 를 확인해보면 bui..

[백준]JAVA - 1039번: 교환

https://www.acmicpc.net/problem/1039 1039번: 교환 첫째 줄에 정수 N과 K가 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, K는 10보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 처음엔 완전 탐색으로 접근했다가 메모리 초과가 발생했다. 2중 for문을 이용해서 모든 경우의 수를 변경해준다. 이 과정에서 visited[number][cnt] 2차원 배열로 자리를 바꾼 후에 생기는 중복된 수를 제거했다. 중복된 수를 제거할 때는 변경 횟수도 중요하다. 변경된 숫자가 같더라도 1번 변경했을 때 나온 A와 2번 변경했을 때 나오는 B는 전혀 다르다. 그렇기 때문에 변경 횟수도 방문 여부를 체크해줄 때 꼭 필요하다. for (int i=0; i

반응형