전체 글 37

[백준] 1987 알파벳 - C++

https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net DFS 와 관련된 문제를 풀다가 알파벳 문제를 풀었다. A~Z 가 26개라는 개념을 알면 쉽게 풀리는 문제였다. 골드 4 문제치고 쉬운 문제지만 시간복잡도 관련하여 정리하고 싶어 글을 작성한다. 백준 내리막길 문제 (1520) 과 굉장히 유사한 문제이다. 내리막길 문제는 DFS 로 문제를 풀려다가 시간 초과의 장벽을 넘어서지 못했다.... 이 이유가 이 문제와 굉장히 유사한 것 같았다. (..

[C++] vector에서 중복된 원소 제거하기

코드를 작성할때 정렬한 후에 중복된 원소의 값을 제거해야하는 문제가 나온다. 이 때 sort, unique, erase 를 사용하여 코드를 짜면된다. (#include 을 선언해야한다.) sort 는 그냥 정렬해주는 함수이다. unique vector 배열에서 중복되지 않는 원소들을 앞에서부터 채워나가는 함수이다. 중복되지 않는 원소들을 앞에서부터 채워나가는 역할을 하기 때문에 남은 뒷부분은 그대로 vector 원소값이 존재한다. 반환 값이 vector의 쓰레기 값의 첫 번째 위치이다. erase erase 함수는 vector 배열에서 특정 원소를 삭제하는 함수이다. 즉 , v.erase(v.begin(), v.end()); 를 하면 v의 원소 모두를 제거해주는 것이다. ( 어디서 부터 어디까지 제거할지..

[c++] STL priority_queue 활용법

C++ STL 우선순위큐 라이브러리 #include 선언방식 priority_queue 변수명; -> 선언한 자료형 변수들을 비교함수에 따라 정렬하는 우선순위 큐를 선언 default로는 큰 수부터 작은 수까지 차례대로 정렬하지만 작은 수부터 큰 수까지 정렬하려면 priority_queue pq; 와 같은 방법이 있다. 원래 - 값을 줘서 작은 수 부터 나오게 하는 방법으로 항상 해왔는데 프로그래머스 문제를 풀면서 위와 같은 방식도 알면 좋은 것을 알았다. (밑에 있는 문제) https://programmers.co.kr/learn/courses/30/lessons/42628 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr push(element) : 우선순위 큐에 원소를 삽입 pop(..

[백준] 18353 병사 배치하기

https://www.acmicpc.net/problem/18353 18353번: 병사 배치하기 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 2,000) 둘째 줄에 각 병사의 전투력이 공백을 기준으로 구분되어 차례대로 주어진다. 각 병사의 전투력은 10,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제를 풀다가 못 풀겠어서 풀이를 봤다... 최장 길이 부분수열(LIS) 문제와 유사한 문제로 개념이 있어야 쉽게 풀리는 문제였다. 풀이는 생각보다 간단하여 금방 풀었다. 최장 길이 부분수열 (LIS) 를 푸는데 2가지 방법이 있다. 첫 번째, 시간 복잡도가 O(N제곱)으로 푸는 방법. 두 번째, 시간 복잡도가 O(NlogN)으로 푸는 방법. 두 가지 모두 살펴보고자 한다. 첫 번째, ..

[SQL 고득점 kit] NULL 처리하기

https://programmers.co.kr/learn/courses/30/lessons/59410 코딩테스트 연습 - NULL 처리하기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr NULL 일때 No name으로 변경시키는 문제였다. WHERE 문으로 어떻게 만드려다가 실패하여 정답을 찾아보았다. IFNULL 이라는 함수를 사용하면 되는 간단한 문제였다. IFNULL( 측정할 변수, NULL 일 때 표시할 이름)

SQL 고득점 kit 2021.09.14

[SQL 고득점 kit] 입양 시각 구하기(2)

https://programmers.co.kr/learn/courses/30/lessons/59413 코딩테스트 연습 - 입양 시각 구하기(2) ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 programmers.co.kr 변수를 사용해서 푸는 문제였다.. 계속 고민하다가 답지 봄 ( 예전에 기업 문제에서 봤을 때 못 풀었었는데, 그 문제랑 거의 똑같아서 놀랬다) 변수는 다음과 같이 SET @hour := -1 과 같이 선언한다. 그 이후 시간이 0~23까지이니까 WHERE 조건문..

SQL 고득점 kit 2021.09.14

[SQL 고득점 kit] 입양 시각 구하기1

https://programmers.co.kr/learn/courses/30/lessons/59412 코딩테스트 연습 - 입양 시각 구하기(1) ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 programmers.co.kr DATETIME , 날짜 데이터에서 일부만 추출하는 방식을 사용해야 되는 문제였다. 날짜 데이터에서 연,월,일,시,분,초 데이터를 추출할 수 있다. YEAR(기준 날짜); MONTH(기준 날짜); DAY(기준 날짜); HOUR(기준 날짜); MINUTE(기준 날..

SQL 고득점 kit 2021.09.14

[SQL 고득점 kit] 동명 동물 수 찾기

https://programmers.co.kr/learn/courses/30/lessons/59041 코딩테스트 연습 - 동명 동물 수 찾기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr 주어진 조건을 하나 하나 따져보면 바로 풀 수 있는 문제이다. 일단 위에서부터 순서 SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY 는 기억하자 이름이 없는 동물은 제외 --> WHERE NAME..

SQL 고득점 kit 2021.09.14

[SQL 고득점 kit] 중복 제거하기

https://programmers.co.kr/learn/courses/30/lessons/59408 코딩테스트 연습 - 중복 제거하기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr DISTINCT 를 사용하는 문제였다. NULL 이 아닌 것의 중복되지 않은 개수를 구하는 것이기 때문에 IS NOT NULL , DISTINCT 를 사용하여 문제를 해결하였다. 그리고 COUNT() 함수를 사용하여 개수를 세주었다.

SQL 고득점 kit 2021.09.14