전체 글 170

[자바] 백준 2293번 동전 1. 2021-08-06

매우어려웠다. 무슨소리인지 접근조차 못했다. 그나마 이해한 것은 5원을 만드는 경우의 수= 1,2원을 통해 5원을 만드는 수(dp[5]) + 5원을 통해 5원을 만드는 수(dp[0]=dp[5-0]. 6원을 만드는 경우의 수= 1,2원을 통해 6원을 만드는 수(dp[6]) + 5원을 통해 6원을 만드는 경우의 수(dp[1]=dp[6-5]). 7원을 만드는 경우의 수= 1,2원을 통해 7원을 만드는 수(dp[7]) +5원으로 7원을 만드는 경우의 수(dp[2]=dp[7-5]). 이렇게 된다. ** 여차저차 해서 난 이해했다고 착각했던 거 같다. 위에 밑줄친 부분인 k값(만들려는 값)에서 coin의 값어치를 뺀 값을 만드는 경우의 수를 더해주는 것이 왜 어째서 해당 coin의 경우를 더해주는 것인지 이해가 잘..

SELECT (1) : 구절 순서와 ORDER BY 함수. 2021-08-05

우선 select 절에 올수 있는 함수는 총 5가지 이다. SELECT, FROM, WHERE, COUNTING BY, HAVING COUNT, ORDER BY 가 그것이다. 그리고 이런 함수들이 오는 '순서' 가 매우 중요하다. 이 순서를 지키지 않고 함수를 나열하면, 에러가 난다. 우선 각 키워드의 특징을 나열하겠다. from: 가공할 데이터의 테이블을 가져오는 역할을 한다. where: 가져온 테이블의 어떤 레코드(ROW)를 출력할지 조건에 따라(관계연산자,비교연산자,패턴연산자, 정규식 패턴을 이용) 선별한다. GROUP by: 집계함수 이다. 우선 어떤 기준에 따라 집계하고 예를 들면 납입한 날/시간/이름이 순차적으로 주어진 테이블에서 해당 납입횟수별로 집계하고 싶다면 이 함수를 쓰면 된다. 자세..

Programming/SQL 2021.08.05

[자바] 백준 11057번 오르막 수. 2021-08-04

우선 어려웠다. 애초에 dp 배열을 1차원으로 구하면 될 줄 알았는데 그게 아니였다. 그리고 배열의 기준을 첫번쨰 자리부터 차근차근 올라가면서 앞 자리수보다 크거나 같은 수를 구하는 방식이 아니라, 미리 맨 마지막 자리에 올 수를 정해놓고, 앞 자리수에 올수 있는 수를 한정해주는 방법을 쓴다. 그래고 매우 어려운 것이, 우선 난 dp문제를 풀때의 철칙이 1. dp[i]=num의 정의, 2. dp[N]과 dp[N-1]의 관계를 파악해서 프로그래밍을 하였는데 그래서 난 계속 1차원 배열로 풀려고 했었다. 그런데 이젠 dp 배열이 2차원으로 푸는 문제인지 아닌지 0순위로 판단후, 파악해야겠다. 우선 이 문제에서 dp[i][j]=num 의 정의는 "i 번째 자리수에서 맨 마지막 자리에 오는 숫자가 j 일때 가능..

형변환 함수 + NULL 처리 함수. 2021-08-03

우선 오라클에서의 데이터 타입은 크게 숫자형, 문자형, 날짜형 으로 나눌수 있는데 이 3개는 서로 형변환 함수를 통해 각각의 타입으로 바꿀수 있다. 대표적으로는 그러나 숫자-> 날짜로는 바꿀수 없고 무조건 문자형을 거친다음 변환시켜야 한다. 간단히 도식으로 표현하자면, 숫자형 -> ->문자형-> -> 날짜형 숫자형 숫자형 : TO_NUMBER() 이렇게 함수가 된다. 또한 각 함수별로, 문자 포맷형식을 지정해서 그 형식에 맞는 문자/날짜/숫자 등을 변환해줄수 있는데 내가 이전 포스트에서 쓴 ALTER session set NLS_DATE_FORMAT = ' yyyy-mm-dd hh24:mm:ss'; 이 형식이 포맷팅 형식의 예이다. 각 함수별 예시. 1.숫자->문자. TO_CHAR() select TO_..

Programming/SQL 2021.08.03

날짜 함수. 2021-08-02

저번부터 궁금했던 것이, 오라클의 DATE형 변수에는 도대체 무슨 함수로 값을 입력해야 하나? 라는 의문이 있었는데, 만약 오라클 자체의 시간으로 입력할려면, SYSDATE 함수를 쓰고, 오라클 DBMS 에 접속한 현지시간을 쓸려면, CURRENT_DATE 를 쓰면 된다. 한번 해보자. INSERT into member(ID,NAME,regdate) values('LG CNS', '최동훈', sysdate); 이 쿼리를 쓰니 된다. !! 그 전에는 무슨 함수를 써야 DATE타입에 값을 넣을수 있는지 몰랐는데, 이제서야 알게됬다. 들어갔다. !! 그런데 난 분명 sysdate 는 년/월/일 뿐만 아니라 시 분 초 까지 다 입력되는것으로 알고 있는데 이런 형식으로 REGDATE 필드(칼럼)값을 보이게 할려면..

Programming/SQL 2021.08.02

문자열 함수 LOWER,UPPER, PAD, INSTR. 2021-07-30

우선 그나마 실용적으로 쓰이는 함수는 LOWER과 UPPER이다. 일단 칼럼 제한 조건부분에서는 칼럼명은 소문자로 쓰든 대문자로 쓰든 오라클에서는 대/소 문자를 구별하지 않지만, WHERE 절 뒤 ROW를 제한하는 조건을 쓸떄 비교연산자 '=' 을 쓰는 경우에는 문자 리터럴로 대/소문자를 구별한다. 이떄 대/소 문자 가리지않고 ROW를 제한하는 방법에 이것을 쓴다. 예를 들면, 이렇게 HUN이라는 이름속에는 대/소문자가 혼재되어 있을경우 구별없이 출력하고자한다면 어떤 쿼리를 써야 할까? select name||id as "이름(회사명)" from member where UPPER(name)='HUN'; 이렇게 해당 칼럼을 아예 대문자로 다 바꾼뒤에 비교연산자 '='를 통해 비교하면 된다. 그다음 많이쓰는..

Programming/SQL 2021.07.30

[자바] 백준 1991번 트리 순회. 2021-07-30

우선 또 기뻤다. 내가 C언어로 배우는 자료구조 란 책을 사회복무요원으로 복무하면서 1년 전쯤에 독학했는데, 그때 공부한 내용을 복습없이 한번에 오로지 내 아이디어로만 구현해 내었다. 이 문제의 핵심은 알파벳이 노드를 나타내는 키로서(비유를 하자면 포인터)로서 작용되어야 하고, 각 입력값을 어떤식으로, 서로가 서로의 관계를 연결시키느냐 였다. 처음에는 각 노드의 입력마다 새로이 new 이렇게 새롭게 클래스를 만들어서 연결시켜 주고자 했는데 이러면 그냥 매번 for문에 돌때마다 새롭게 클래스가 생성될뿐 그 클래스와 다른 클래스의 관계를 표현하기엔 어려운 면이 있었다. 그래서 나는 배열에 알파벳 순서대로(유니코드를 이용한 기발한 방법) 저장하고, 배열의 인덱스와 알파벳의 1부터 26까지의 넘버를 매치시켜서 ..

ROWNUM을 이용한 페이징 출력, 중복제거 distinct 키워드, 문자열 자르기 SUBSTR 함수. 2021-07-29

우선 페이징 이라 함은, 한번에 테이블 중 몇개씩 끊어서 나열하는 것인지 기준에 따라 정렬시키는 방법이다. 이런 페이징을 하기 위해서는 테이블을 특정 기준에 따라 나눌수 있어야 한다. 그런데 일반적으로 생성한 테이블들을 보면 어떤 추가된 순서에 따라 숫자를 부여하는 칼럼을 사용자가 만들어놓지 않은 이상 그런 순차적으로 뚜렷하게 나눌수 있는 기준이 되는 칼럼을 찾기 어렵다. 예를 들면 저번에 내가 만들어놓은 이런 칼럼에서, 기준으로 잡을 것이 안보일 것이다. 이때 순차적으로 페이징할수 있는 기준을 만드는 것이 바로 ROWNUM을 이용하는 것이다. 바로 위 사진의 제일 왼쪽에 1 부터 4까지 붙여진 것이 있는데 이것은 오라클에서 자체적으로 select 문을 통해 결과집합을 생성하면서(where절 단계에서) ..

Programming/SQL 2021.07.29

정규식 패턴 + 특수문자가 포함된 칼럼 검색 2021-07-28

select * from member where REGEXP_LIKE(email,'\w+@\w+.(com|org|net)'); 우선 내가 저번에 저장한 member 테이블에서 전화번호를 검색한다고 하자. 우선 이전 포스트에서 설명한 단순 패턴비교 연산으로도 검색이 가능하다. select *from member where phone like '%-%-%'; 이렇게 말이다. 그런데 이럼 문제가 있다. 범위가 너무 넓다는 것이다. %는 숫자 문자, 영어 등 모든 문자를 포함한 값이 올수 있다는 것인데, 숫자뿐 아니라 김치-바나나-학성고 등의 문자열도 검색되버릴수 있다는 것이다. 그래서 우리는 좀더 정교한 검색을 위해 정규식을 사용할 수 있다. 우선 [ ] 연산자는 1자리를 나타낸다. 예를들면. select *..

Programming/SQL 2021.07.28

[자바] 백준 2447번 별 찍기 - 10. 2021-07-27

1시간이 걸려서 해결했다. 이 문제의 핵심은 "반복문의 1회 연산시 증가하는 단위값" 을 점차적으로 3을 나누어서 1까지 재귀를 쓴 다음 단위값이 1이면 해당 좌표에 실질적인 별을 찍어주면 된다. 자세한 풀이는 코드에 주석으로 남겼다. import java.util.Scanner; public class Main { static char[][] arr; public static void main(String[] args) { Scanner s = new Scanner(System.in); StringBuilder sb=new StringBuilder(); int N=s.nextInt(); arr=new char[N][N]; for (int i = 0; i < N; i++) { for (int j = 0;..