전체 글 199

Min Stack (Stack)

이번 문제는 LeetCode의 Queue, Stack 튜토리얼에 포함되어 있던 문제로 스택의 기본적인 연산과 추가적으로 요구되는 연산을 수행할 수 있는 스택 자료구조를 직접 구축하여 풀어보는 것이 목적이다. Explore - LeetCode LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore. leetcode.com 재밌는 것은 상위권 풀이를 보면 자바에서 제공하는 Stack 자료구조를 이용해 푼 풀이가 많다는 것..

Java를 이용한 Stack 실습

LeetCode의 Queue, Stack 실습 중 Stack 부문을 읽고 작성하는 포스트다. Explore - LeetCode LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore. leetcode.com 자바에서는 Stack이라는 클래스로 Stack, 스택 자료구조를 제공하고 있다. 자료구조를 공부했다면 못 들어봤을 수가 없는 대표적인 Last-In-First-Out 자료구조인 스택은 이전의 Queue와 달리 같은..

자료구조 2021.02.04

Perfect Squares (BFS)

LeetCode의 Queue 튜토리얼에서 마지막 문제 Perfect Squares다. Account Login - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이를 보면 주로 DP를 사용하는 것 같은데 아직 거기까진 익숙하지 않기 때문에 그리고 지금은 Queue와 BFS를 풀이하는 중이기 때문에 차치하고 BFS를 활용하여 진행했다. 이번 문제는 풀이를 봐도 이해하는데 시간이 꽤 걸렸는데 다행히 Queue와 BFS를 사용하여 잘 설명된 풀이를 찾을 수 있었다...

Open the Lock (BFS)

이번 문제 역시 LeetCode의 Stack, Queue 튜토리얼에 있는 'Open the Lock'이라는 문제다. Explore - LeetCode LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore. leetcode.com Queue를 활용해서 BFS 방식으로 푸는게 목적이기 때문에 지난번 Number of Islands처럼 DFS같은 방법은 사용하지 않고 진행했다. 이번 문제는 다음과 같다. 0, 1, 2, ..

Number of Islands (DFS)

예전에 LeetCode에서 Queue를 공부할 때 Number of Islands라는 문제를 푼 적이 있다. 2020/07/21 - [알고리즘/LeetCode] - Number of Islands using BFS Number of Islands using BFS 제목만 보면 거창해 보이지만 옛날 포스팅과 마찬가지로 게으름뱅이가 자신의 안타까운 코딩 능력을 체감하고 반성하는 의미에서 적는 글이다. 여기서 다루는 문제는 LeetCode의 Explore 탭에서 제 haruhiism.tistory.com 그때는 문제에서도 Queue 자료구조를 활용한 BFS를 요구했기 때문에 이를 활용했지만 최근 다시 공부하면서 풀이를 되새겨보니 꼭 이를 사용하지 않아도 문제를 풀 수 있을 것 같아 풀이를 조금 바꿔보았다. c..

Java를 이용한 Circular Queue 구현

이 포스트는 LeetCode에서 Queue, Stack 튜토리얼을 읽으면서 배운 내용을 기록하고 있다. Explore - LeetCode LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore. leetcode.com Queue Queue, 큐는 대표적인 FIFO 자료구조로 Stack과 더불어 유명한 선형 자료구조다. FIFO는 말 그대로 First-In-First-Out으로 먼저 자료구조에 삽입된 데이터가 먼저 자료..

자료구조 2021.02.03

프로그래머스 SQL 고득점 Kit - GROUP BY

프로그래머스에서 SQL 고득점 Kit을 풀고 추가적으로 조사하여 얻은 지식을 정리하는 문서다. 문제를 풀 때는 익숙한 MySQL을 활용하였다. GROUP BY 이전 포스트에서도 몇 번 설명했었지만 GROUP BY는 레코드들을 특정 칼럼 값들을 기준으로 묶는 명령어다. 그래서 그룹화한 후 집계 함수를 사용하는 방식으로 많이 사용되는데 COUNT() 함수를 사용하여 해당 그룹에 몇 명이 있는지 출력하는 쿼리를 작성해보면 다음과 같다. MariaDB [vulnerable_db]> SELECT COMPANY, COUNT(NAME) FROM USER_TABLE GROUP BY COMPANY; +-----------------------------+-------------+ | COMPANY | COUNT(NAME..

WITH (Common Table Expressions)

이 MySQL 문서와 이 튜토리얼을 읽고 얻은 지식을 정리하는 포스트다. WITH WITH란 키워드 자체는 들어본 적도, 써본 적도 없기 때문에 프로그래머스에서 SQL Kit 문제를 풀다가 처음 만났을 때 당혹스러웠다. 항상 모든 쿼리는 한 줄로 SELECT로 시작해서 조건으로 끝난다고 막연히 생각하고 있었는데 실제로는 더 복잡한 쿼리를 사용할 수도 있겠다는 느낌을 받았다. WITH 명령어의 목적은 해당 쿼리가 실행되기 전에 쿼리에서 참조할 수 있는 임시 테이블을 만드는 것이다. 이 임시 테이블 역시 특정 쿼리(서브 쿼리)의 결과로 생성되어야 하는데 적절하진 않지만 기존의 테이블을 활용하여 예시를 보이면 다음과 같다. MariaDB [vulnerable_db]> WITH MY_COMPANY AS (SEL..

프로그래머스 SQL 고득점 Kit - SUM, MAX, MIN

프로그래머스에서 SQL 고득점 Kit을 풀고 추가적으로 조사하여 얻은 지식을 정리하는 문서다. 문제를 풀 때는 익숙한 MySQL을 활용하였다. 집계 함수 이번 Kit에서 다루는 함수들은 집계 함수들로 테이블의 여러 행에서 하나의 결괏값을 반환하는 함수들이다. 함수 이름에서 볼 수 있듯이 합계(SUM), 최댓값(MAX), 최솟값(MIN) 등을 구하려면 당연히 여러 행을 활용해야 할 것이며 이들의 결괏값은 당연히 하나만 반환된다. 레코드를 특정 칼럼 값에 따라 그룹화하는 GROUP BY 명령어와 함께 사용된다면 더욱 효과적이다. 알아둘 것은 집계 함수는 SELECT된 레코드들에 대해서 수행하는 것이기 때문에 WHERE 절에서 사용할 수 없다. 예를 들어 다음처럼 점수가 최고 점수인 레코드만 출력하는 쿼리를 ..

프로그래머스 SQL 고득점 Kit - SELECT

프로그래머스에서 SQL 고득점 Kit을 풀고 추가적으로 조사하여 얻은 지식을 정리하는 문서다. 문제를 풀 때는 익숙한 MySQL을 활용하였다. SELECT 기본적으로 SELECT는 레코드를 조회하는 명령어기 때문에 특정 조건(또는 모든)의 칼럼 값이나 문자열뿐 아니라 함수 실행의 결괏값을 얻어올 수 있다. 대표적인 예로 현재 시간을 반환하는 NOW() 함수를 SELECT 하면 다음과 같은 결과를 얻을 수 있다. MariaDB [(none)]> SELECT NOW(); +---------------------+ | NOW() | +---------------------+ | 2021-02-01 23:27:53 | +---------------------+ 1 row in set (0.000 sec) 보통 ..