본문 바로가기

분류 전체보기

(165)
[MySQL] '조인 연산자'와 '집합 연산자'의 차이 조인 연산자는 " 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법 " 이다. 쉽게 말해서 아예 두 테이블을 '가로로' 연결한 뒤에 연산을 처리한다. 그래서 '열'이 늘어난다. 대표적인 종류는 다음과 같다. - (INNER) JOIN : 두 테이블 모두에 공통된 행만 가져옴. - LEFT (OUTER) JOIN : 왼쪽 테이블 행은 모두 가져오고, 오른쪽은 공통된 것만 가져옴. 나머지는 null값. - RIGTH (OUTER) JOIN : 오른쪽 테이블 행은 모두 가져오고, 왼쪽은 공통된 것만 가져옴. 나머지는 null값. - FULL (OUTER) JOIN : 각 테이블의 모든 행을 가져옴. 일치하지 않는 내용은 null값. 집합 연산자는 " 2개 이상의 질의 결과를 하나의 결과로 만들어 주는 방..
[MySQL] 두 날짜의 차이를 구하라 (feat. DATEDIFF, TIMESTAMPDIFF) 시점 A 와 시점 B 간격의 차이를 구하는 방법은 무엇이 있을까? ' 시점 A - 시점 B ' 를 하지 않아도 날짜 사이의 차이를 구하는 함수가 있다. 바로 DATEDIFF 함수와 TIMESTAMPDIFF 함수다. DATEDIFF 함수는 순전히 ' 일 ' 차이만 계산한다. 쉽게 이야기해서 ' 날짜 A - 날짜 B ' 를 해준다. DATEDIFF('날짜1', '날짜2') -- 날짜1 에서 날짜2 를 뺀다. 반면 TIMESTAMPDIFF 함수는 ' 연(YEAR) ', ' 분기(QUARTER) ', ' 월(MONTH) ', ' 주(WEEK) ', ' 일(DAY) ' 시(HOUR) ', ' 분(MINUTE) ', ' 초(SECOND) ' 단위로 차이를 구할 수 있다. TIMESTAMPDIFF 함수에 원하는 단위..
[MySQL] 날짜와 시간 포멧 정하기 (feat. DATE_FORMAT) 주어진 날짜 및 시간을 원하는 형식으로 바꿀 수 있는 함수가 ' DATE_FORMAT ' 이다. DATE_FORMAT ( 시간 값 , '원하는 포멧' ) 형식으로 지정한다. 원하는 포멧은 대소문자를 가리기 때문에 주의해야 한다. %Y 4자리 년도 2022, 1990 %y 2자리 년도 22, 90 %c 숫자 월 (한자리) 1, 2, 3, ... 12 %M 긴 월 (영문) September %b 짧은 월 (영문) Jan, Feb, Mar %d 일자 (두자리) 01, 15, 30 %e 일자 (한자리) 1, 15, 30 %I 시간 (12시간) 01, 05, 11, 12 %H 시간 (24시간) 01, 05, 17, 21, 24 %i 분 00, 05, 30, 54 %s 초 00, 10, 34 SELECT NAME,..
[MySQL] 여러가지 NULL 처리 방법 (feat. IF , IFNULL , COALESCE , CASE) 데이터 값이 NULL 인 경우 다르게 처리해야 할 때가 있다. 이때 4가지 방법으로 NULL 을 다르게 처리할 수 있다. 1. IF 로 처리하기 IF ( 조건문 , '참일 경우', '거짓일 경우' ) IF 문으로 해당 컬럼의 값이 NULL 일 경우 처리할 수 있다. SELECT IF(NAME IS NULL, 'No name', NAME) FROM 테이블명; 2. IFNULL 로 처리하기 IFNULL ( 컬럼 명, 'NULL 일 경우 대체 값' ) IFNULL 문으로 해당 컬럼의 값이 NULL 일 경우 원하는 값으로 대체할 수 있다. SELECT IFNULL(NAME, 'No name') FROM 테이블명; 3. COALESCE 로 처리하기 COALESCE ( 첫 번째 표현식, 두 번째 표현식, 세 번째 ..
[MySQL] 특정 문자열 검색하기 (feat. LIKE 함수) 문자열에 특정 문자가 포함되어 있는지 확인할 필요가 있을 때가 있다. LIKE 함수를 사용하면 된다. ' % ' 는 0개 이상의 문자를 의미한다. 만약 LIKE ' %학교 ' 가 있다면 학교 앞에 어떤 단어가 있어도 상관없이 포함된다. 심지어 아무런 단어가 없어도 된다. 즉 마지막에 '학교' 끝나는 단어라면 해당된다. LIKE ' 전문% ' 이라면 앞에 '전문'으로 시작하는 단어를 나타낸다. LIKE ' %사람% ' 은 '사람'이란 단어를 포함한 단어를 선택한다. LIKE 키워드를 두 번 이상 쓰려면 AND 또는 OR 을 통해 이어주면 된다. select * from 테이블명 where title like '%아디다스%' AND '%나이키%';
[프로그래머스] (Lv.2) N개의 최소공배수 ** 문제 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. - 출력 예시 - 정답 코드 class Solution { public int solution(int[] arr) { int max = Math.max(arr[0], arr[1]); int min = Math.min(arr[0], arr[1]); int GCD = gcd(max, min); int..
[프로그래머스] (Lv.2) 멀리 뛰기 문제 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2칸) 의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다. 제한 사항 n은 1 이상, 2000 이하인 정수입니다. - 출력 예시 - 정답 코드 class Solution { public long solution(int n) { ..
[Java] Map 인터페이스에서 값(value)을 기준으로 정렬하기 Map 인터페이스는 '키(key)' 와 '값(value)' 로 이뤄져있다. 키는 중복이 허용되지 않고, Map 인터페이스의 기준이 된다. 따라서 키가 정렬 기준이다. 만약 TreeMap 을 만들어 다음과 같이 코드를 넣으면 key 기준에 따라 정렬되어 저장된다. Map map = new TreeMap(); map.put("b", 100); map.put("a", 90); map.put("c", 80); map.put("d", 70); map.put("e", 60); Set set = map.entrySet(); System.out.println(set); // [a=90, b=100, c=80, d=70, e=60] 하지만 값(value)을 기준으로 오름차순하고 싶으면 어떻게 해야할까? 바로 EntryS..
[코드스쿼드] 숫자 야구게임 문제 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방의 수를 맞추면 승리한다. [예] 상대방의 수가 425일 때, 123을 제시한 경우 : 1 스트라이크 456을 제시한 경우 : 1 스트라이크 1볼 789를 제시한 경우 : 낫싱 위 숫자 야구게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. 이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면..
[Java] Math.random( ) 원하는 범위 설정하기 Math.random( ) 의 원리는 다음과 같다. 0.0 < = Math.random( )
[프로그래머스] (Lv.2) 구명보트 *** 문제 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다. 구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다. 사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 작성해주세요. 제..
[프로그래머스] (Lv.2) 짝지어 제거하기 ** 문제 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = baabaa 라면 b aa baa → bb aa → aa → 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다. 제한사항 문자열의 길이 : 1,000,000이하의 자연수 문자열은 모두 소문자로 이루어져 있습니다. - 출..
[프로그래머스] (Lv.2) 카펫 *** 문제 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다. 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다. 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다..
[프로그래머스] (Lv.2) 영어 끝말잇기 * 문제 1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 이전에 등장했던 단어는 사용할 수 없습니다. 한 글자인 단어는 인정되지 않습니다. 다음은 3명이 끝말잇기를 하는 상황을 나타냅니다. tank → kick → know → wheel → land → dream → mother → robot → tank 위 끝말잇기는 다음과 같이 진행됩니다. 1번 사람이 자신의 첫 번째 차례에 tank를 말합니다. 2번 사람이 자신의 첫 번째 차례에 kic..
[프로그래머스] (Lv.2) 다음 큰 숫자 문제 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. 예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. - 출력 예시 - 정답 코드 class Solution { public int solution(int n) { String binaryN = Integer.toBinaryString(n); int cntN = ..
[프로그래머스] (Lv.1) 모의고사 *** 문제 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주..
[프로그래머스] (Lv.2) 피보나치 수 문제 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = 2 + 3 = 5 와 같이 이어집니다. 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요. - 출력 예시 - 정답 코드 class Solution { public int solution(int n) { long answer = 0L; long num = 0L; lo..
[프로그래머스] (Lv.2) 숫자의 표현 문제 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다. 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15 15 = 15 자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요. - 출력 예시 - 정답 코드 class Solution { public int solution(int n) { int count = 0; int sum; for (int i = 0; i < n; i++) { sum = 0; for (int j = i + 1; ..
[프로그래머스] (Lv.2) 올바른 괄호 문제 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요. 제한사항 문자열 s의 길이 : 100,000 이하의 자연수 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다. - 출력 예시 - 정답 코드 class Solution { boolean solution(String s) { Stack stack = n..
[프로그래머스] (Lv.2) 최솟값 만들기 문제 길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다. 배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.) 예를 들어 A = [1, 4, 2] , B = [5, 4, 4] 라면 A에서 첫번째 숫자인 1, B에서 첫번째 숫자인 5를 뽑아 곱하여 더합니다. (누적된 값 : 0 + 5(1x5) = 5) A에서 두번째 숫자인 4, B에서 세번째 숫자인 4를 뽑아 곱하여 더합니다. (누적된 값 : 5 + 16(4x4) = 21) A..
[프로그래머스] (Lv.1) 폰켓몬 문제 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. 홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다. 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택 첫 번째(3번), 세 번째(2번) 폰켓몬을 선택 첫 번째..
[Java] String ← → 기본형 값 (feat. 형변환) 1. 기본형 값 ☞ String 으로 변환 - String.valueOf( int n ) - n + "" 두 방법 모두 기본형을 문자열로 변경할 수 있다. 성능은 valueOf( ) 가 더 좋지만, 빈 문자열을 더하는 방법이 간단하고 편하기 때문에 성능향상이 필요한 경우에만 valueOf( ) 을 사용하면 된다. 2. String ☞ 기본형 값 으로 변환 - Integer.parseInt( String str ) / Byte.parseByte( String str ) / Double.parseDouble( String str ) / Short.parseShort( String str ) / Long.parseLong( String str ) / Boolean.parseBoolean( String str ..
[프로그래머스] (Lv.2) 이진 변환 반복하기 문제 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다. 예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요. - 출력 예시 - 정답 코드 class Solution { static int zeros = 0; static int cou..
[프로그래머스] (Lv.2) JadenCase 문자열 만들기 *** 문제 JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고) 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 s는 길이 1 이상 200 이하인 문자열입니다. s는 알파벳과 숫자, 공백문자(" ")로 이루어져 있습니다. 숫자는 단어의 첫 문자로만 나옵니다. 숫자로만 이루어진 단어는 없습니다. 공백문자가 연속해서 나올 수 있습니다. - 출력 예시 - 정답 코드 ★ 오답 ★ class Solution { public String solution(String s) { String[] str..
[프로그래머스] (Lv.2) 최댓값과 최솟값 문제 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다. - 출력 예시 - 정답 코드 class Solution { public String solution(String s) { String[] strArr = s.split(" "); int[] numArr = new int[strArr.length]; int idx = 0; for (String str : strArr) { numArr[idx++] = Integer.parseInt(st..