TIL 04-28

김덕협·2026년 4월 28일

TIL

목록 보기
1/41

📅 2026-04-28 (화)


✍️ 공부한 내용

  • SQL 中 DDL과 DML
  • SW 모의 역량테스트(A형) - 보물상자 비밀번호 (1일 1알고리즘)

[DDL]

  • 정의: Data Definition Language
  • 역할: 데이터의 기본 구조 및 형식 변경
  • SQL 키워드: CREATE, ALTER, DROP

[DML]

  • 정의: Data Manipulation Language
  • 역할: 데이터 조작
  • SQL 키워드: INSERT, UPDATE, DELETE

DDL - Managing Tables : 테이블 만들기

-- 1. Create a table

CREATE TABLE examples (
		-- 컬럼명 데이터타입 제약조건
    ExamId INTEGER PRIMARY KEY AUTOINCREMENT,
    LastName VARCHAR(50) NOT NULL,
    FirstName VARCHAR(50) NOT NULL
)

DDL - MODIFYING TABLE FIELDS

-- 2.1 ADD COLUMN
ALTER TABLE
    examples
ADD COLUMN
    Country VARCHAR(100) NOT NULL DEFAULT 'default value';

-- sqlite는 단일 문을 사용하여 한번에 여러 열을 추가하는 것을 지원하지 않음
ALTER Table
    examples
ADD COLUMN
    Age INTEGER NOT NULL DEFAULT 0,
    Address VARCHAR(100) NOT NULL DEFAULT 'default value';
    
    
  --수정해줘야 한다.
ALTER Table
    examples
ADD COLUMN
    Age INTEGER NOT NULL DEFAULT 0;
    
ALTER Table
    examples
ADD COLUMN
    Address VARCHAR(100) NOT NULL DEFAULT 'default value';
    
-- 2.2 RENAME COLUMN, Address컬럼을 Postcode로 수정하기
ALTER Table
    examples
RENAME COLUMN
    Address TO Postcode; 
    
-- 2.3 DROP COLUMN
ALTER Table
    examples
DROP COLUMN
    Postcode;


-- 2.4 RENAME TO
ALTER Table
    examples
RENAME TO
    new_examples;

DML - Modifying Data

-- 3. Delete a table
DROP Table new_examples;

-- 실습 테이블 생성
CREATE TABLE articles (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title VARCHAR(100) NOT NULL,
    content VARCHAR(200) NOT NULL,
    createdAt DATE NOT NULL
);


-- 1. Insert data into table
INSERT INTO 
    articles (title, content, createdAt)
VALUES
    ('hello', 'world', '2000-01-01');
    
-- 한번에 여러 데이터 추가하기
INSERT INTO 
    articles (title, content, createdAt)
VALUES
    ('title1', 'content1', '1900-01-01'),
    ('title2', 'content2', '1800-01-01'),
    ('title3', 'content3', '1700-01-01');
    
-- DATE 함수로 날짜 입력하기
INSERT INTO 
    articles (title, content, createdAt)
VALUES
    ('제목', '내용', DATE());
    
 UPDATE
    articles
SET
    title = 'update Title';
--> 이렇게 조건문 where 없이 수정하면 모든 레코드가 수정됨

UPDATE
    articles
SET
    title = 'update Title'
WHERE
    id = 1;

--> 여러 내용 수정하기
UPDATE
    articles
SET
    title = 'update Title',
    content = 'update Content'
WHERE
    id = 2;
    
    
DELETE FROM
    articles
WHERE
    id = 1;
    
    
    
DELETE FROM articles
WHERE id IN (
    SELECT id
    FROM articles
    ORDER BY createdAt ASC
    LIMIT 2
);

Join

  • Inner Join : 두 테이블 중 값 일치하는 레코드만 출력
    • FROM 절 이후 메인 테이블 지정
    • INNER JOIN이후 메인 테이블과 조인할 테이블 지정
    • ON 이후 조인 조건 작성
      -- INNER JOIN
      SELECT articles.title, users.name
      FROM articles
      INNER JOIN users
        ON articles.userId = users.id
      WHERE users.id = 1
  • Left Join : 왼쪽으로 지정한 테이블은 다 출력, 그리고 오른쪽 테이블은 조건에 일치하는 것만 붙인다.
    • FROM 절 이후 왼쪽 테이블 지정
    • LEFT JOIN절 이후 오른쪽 테이블 지정
    • ON 키워드 이후 조인 조건 작성
    • 누락 값들은 Null로 채워진다. (게시글 작성 이력 없는 회원 정보 조회 등에 사용)
      -- LEFT JOIN
      SELECT users.name
      FROM users
      LEFT JOIN articles
      ON articles.userId = users.id
      WHERE articles.userId IS NULL;

SWEA 5658. 보물상자 비밀번호

1 문제 분석 및 제약 조건 확인

제약 조건 : N은 4의 배수이고, 8이상 28이하의 정수이다. (8 ≤ N ≤ 28)
N개의 숫자는 각각 0이상 F이하로 주어진다. (A~F는 알파벳 대문자로만 주어진다.)
K는 생성 가능한 수의 개수보다 크게 주어지지 않는다.

2 알고리즘 및 자료구조 선택

구현 및 시뮬레이션

3 절차적 구현 흐름

N // 4 만큼 회전을 진행하면 그 뒤는 계속 반복된다.
중복되는 숫자를 세지 않기 위해 set을 사용.
k번째로 큰 수를 찾아야 하기에 내림차순 정렬을 하여야 한다.

4 시간 복잡도

O(N^2) (바깥 루프 N // 4) * (nums = turn(nums), 에 N 소요)

5 정답 코드

def turn(word):
    return word[-1] + word[:-1]
 
T = int(input())
for tc in range(1, T+1):
    N, K = map(int, input().split())    # N은 4의 배수로 주어질 숫자 개수, K는 몇번 돌릴지
    nums = input()
    term = N // 4
    num_set = set()
 
    for i in range(term):
        for j in range(4):
            start = j * term
            end = (j+1) * term
            res = nums[start:end]
 
            num_set.add(int(res, 16))
        nums = turn(nums)
             
    num_list = list(num_set)
    num_list.sort(reverse=True)
    ans = num_list[K-1]
 
    print(f"#{tc} {ans}")
profile
뭘봐

0개의 댓글