본문 바로가기
T.I.L. :: Today I Learned/항해99 14기 온보딩

3월 20일 Day15.

by DaSsom 2023. 3. 20.
 Today I Learned 1. 백준 17068번 풀면서 있었던 일
  • 문제점

 막대기 :: https://www.acmicpc.net/problem/17608

 

17608번: 막대기

아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로

www.acmicpc.net

이 문제를 스택으로 접근하여 해결하기로 함

for (int i = 0; i < stk.length; i++) {
            if ( max < stk[i]) {
                count++;
            }
        }

반복문을 돌릴 때 단순히 범위를 0부터 시작했으나 원하는대로 답이 나오지 않았음

 

  • 시도해본 것

혹시 대소관계의 문제인가 싶어 바꿔서 해보고 반복문을 쓰지 않고 인덱스 변수를 따로 설정하여 진행했지만 틀림

 

  • 해결방법

1. 문제에서 원하는게 배열의 마지막 변수와 비교를 해야하기 때문에 스택은 끝부터 0으로 (거꾸로) 순회해야함

2. 중복된 막대기 크기가 있을 수 있으므로 최대값을 새로 갱신해주어야 함

     for (int i = stk.length - 2; i >= 0 ; i--) {
            if ( max < stk[i]) {
                count++;
                max = stk[i];
            }
        }

 

  • 알게된 것

반복문 안에서 새로운 값을 갱신해주어야 할 때를 자꾸 놓치고 있음 그저 변수가 반복문 바깥에 있으면 자동으로 갱신이 될 거라고 생각함 ㅠㅠ 반복문 안에서 값을 갱신해주는 것을 기억해야 할 듯!!

 


 

Today I Learned 2. 백준 12605번 풀면서 있었던 일
  • 문제점

단어순서뒤집기 :: https://www.acmicpc.net/problem/12605

 

12605번: 단어순서 뒤집기

스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만

www.acmicpc.net

이 문제를 스택으로 접근하여 해결하기로 함 그런데 원하는대로 출력되지 않고 예제 1번이 "test a a test"라고 출력..

 

  • 시도해본 것

혹시 반복문에서 갱신을 안해준것인가? 변수의 위치가 잘못된걸까? 요리조리 변경해보았음

 

  • 해결방법

굳이 스택으로 풀지않고 그저 배열을 거꾸로 순회하며 출력하면 되었음..........!!!!

 for (int j = strings.length - 1; j >= 0; j--) {
                bw.write(strings[j] + " ");
            }

 

  • 알게된 것

꼭 자료구조를 사용하지 않고 단순하게 생각하면 해결할 수 있는 문제가 많다.

 


 

 

Today I Learned 3. sql 공부하며 정리해본 내용

<SQL>

* SQL : Structured Query Language, 관계형 데이터베이스에서 데이터를 다루기 위해 사용하는 언어

 

* 데이터베이스

사용하는 이유? 필요한 데이터를 적절하게 꺼내오기 위해서.

 

* CRUD

데이터를 생성(Create)하고, 읽고(Read), 수정하고(Update), 삭제(Delete)한다.

 - * (asterisk) :전체 컬럼 조회하고 싶을 때 사용

 - 문자열은 ' ' (작은따옴표) 사이에 표기

show tables;

select
select 컬럼명 from 테이블명 where 조건절;

 

* where절에 자주 쓰이는 문법

 1. 같지 않음 : !=
 2. 범위 : between ~ and ~    // ~ 부터 ~까지 데이터를 선택
 3. 포함 : in ( ~, ~ )                // ~ 과 ~에 해당하는 데이터를 선택
 4. 패턴 : like '%~'                 // %에는 아무거나 들어가도 되고 ~로 끝나는 데이터를 선택

 cf. like 사용법

like 'a%'    : a로 시작하는 모든 데이터
like '%a'    : a로 끝나는 모든 데이터
like '%a%' : a를 포함하는 모든 데이터
like 'a%b'  : a로 시작해서 b로 끝나는 모든 데이터

* 그 외 문법

 limit N                 : N개의 데이터만 출력
 distinct(컬럼명)   : 해당 컬럼의 중복된 데이터는 제거하고 선택
 count(컬럼명)     : 해당 데이터의 갯수를 출력 

 

 ** 에러메세지가 나타난다면 혼자서 해결해보기!!

 


* group by : 데이터를 그룹별로 묶을 수 있도록 해주는 절

 group by 컬럼명 : 해당 컬럼을 기준으로 데이터를 그룹별로 묶어줌

 

* order by : 데이터 정렬

 order by 컬럼명 asc / desc: 해당 컬럼을 기준, 오름차순(asc) / 내림차순(desc) 으로 정렬

 

* 집계함수

COUNT(*)
COUNT(컬럼)
COUTN(DISTINCT 컬럼)
SUM(컬럼)
AVG(컬럼)
MIN(컬럼)
MAX(컬럼)
전체 row를 count하여 반환
컬럼값이 null 인 row 제외하고 count하여 반환
컬럼값이 null 이 아닌 row에서 중복을 제거한 count를 반환
합계 반환
평균값 반환
최솟값 반환
최댓값 반

 

* SELECT 문 논리적 수행 순서

   SELECT           - 5
   FROM              - 1
   WHERE           - 2
   GROUP BY      - 3
   HAVING           - 4
   ORDER BY      - 6

 

* 별칭 (Alias) : 여러 개의 테이블을 join 하거나 서브쿼리가 있을 때 테이블명을 같이 명시해야 하는 경우 테이블명을 짧게 줄여서 씀. 혼동을 최소화하기 위함.

'T.I.L. :: Today I Learned > 항해99 14기 온보딩' 카테고리의 다른 글

3월 22일 Day17.  (0) 2023.03.22
3월 21일 Day16.  (0) 2023.03.21
3월 18일 Day13.  (0) 2023.03.18
3월 17일 Day12.  (0) 2023.03.17
3월 16일 Day11.  (0) 2023.03.16