728x90

https://www.acmicpc.net/problem/2468

 

2468번: 안전 영역

재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는

www.acmicpc.net

 

 

 

풀이)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main_BJ_2468_안전영역 {
    static int[][] map;
    static int low=Integer.MAX_VALUE;
    static int high=Integer.MIN_VALUE;
    static int n;
    static boolean[][] visited;
    static int[] dx = {-1, 1, 0, 0};
    static int[] dy = {0, 0, -1, 1};
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        map = new int[n][n];

        for(int i=0; i<n; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int j=0; j<n; j++){
                map[i][j] = Integer.parseInt(st.nextToken());
                low = Math.min(low, map[i][j]);
                high = Math.max(high, map[i][j]);
            }
        }


        int sum=1;
        for(int k = low; k<high; k++){
            visited = new boolean[n][n];
            int temp = 0;
            for(int i=0; i<n; i++){
                for(int j=0; j<n; j++){
                    if(!visited[i][j] && map[i][j]>k){
                        bfs(i, j, k);
                        temp++;
                    }
                    else if(!visited[i][j] && map[i][j]<=k)
                        visited[i][j] = true;
                }
            }
            if(sum <= temp) {
                sum = temp;
            }
        }

        System.out.println(sum);

    }//main
    private static void bfs(int x, int y, int level){
        Queue<int []> q = new ArrayDeque<>();
        visited[x][y] = true;
        q.offer(new int[] {x, y});

        while(!q.isEmpty()){
            int[] cur = q.poll();
            for(int i=0; i<4; i++){
                int nx = cur[0]+dx[i];
                int ny = cur[1]+dy[i];

                if(check(nx, ny) && map[nx][ny]>level && !visited[nx][ny]){
                    visited[nx][ny] = true;
                    q.offer(new int[] {nx, ny});
                }
            }

        }//while
    }//bfs
    private static boolean check(int x, int y){
        if(x<0 || y<0 || x>=n || y>=n)
            return false;
        return true;
    }//check
}

이 문제는 완탐과 bfs를 이용하면 간단한 문제다!!

전체 지도를 입력받고, bfs를 이용해서 잠기지 않은 부분을 탐색한다!

이때, visited 배열을 이용해서 방문 처리를 한다.(이때, 잠긴 부분도 방문 처리를 해야 편하다!)

 

먼저 맵에서 가장 작은 수위와 높은 수위를 체크한 후 for문을 돌린다.

그리고 전체 맵을 완전 탐색 하면서 방문하지 않았고, 잠기지 않으면 다시 bfs를 한다.

이때, bfs를 수행한다는 것은 적어도 하나의 잠기지 않은 땅이 생기는 것이므로 땅의 개수를 추가해주면 된다.

그리고 하나의 탐색이 끝날때마다 가장 큰 값으로 교체하면 끝!

 

728x90

'코테 > 백준' 카테고리의 다른 글

백준 2583 영역 구하기(JAVA)  (0) 2023.04.20
백준 10951 A+B - 4(JAVA)  (0) 2023.04.18
백준 1715 카드 정렬하기(JAVA)  (0) 2023.04.11
백준 10844 쉬운 계단 수(JAVA)  (0) 2023.04.06
백준 1946 신입 사원(JAVA)  (0) 2023.04.06
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/86491

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

풀이)

import java.io.*;
import java.util.*;

class Solution {
    public int solution(int[][] sizes) {
        int maxX = 0;
        int maxY = 0;
        for(int i=0; i<sizes.length; i++){
            int x = Math.max(sizes[i][0], sizes[i][1]);
            int y = Math.min(sizes[i][0], sizes[i][1]);
            maxX = Math.max(x, maxX);
            maxY = Math.max(y, maxY);
        }
        
        
        int answer = maxX*maxY;
        return answer;
    }
}

처음에는 이걸 어떻게 기준을 삼고 어떻게 돌려야 할지 잘 모르겠어서 애먹었다.

(greedy처럼 해야할것 같은데... 어떻게 해야할지 고민했다)

 

그러다가 기준은 내가 정하면 된다는 것을 깨닫고....(검색했다ㅎㅎ)

가로와 세로를 그냥 내가 정해버리면 된다!!

나는 가로를 긴 길이로, 세로를 작은 길이로 해서 가로끼리, 세로끼리 비교하여 값을 구했다.

이러면 나름 간단해지는 문제!!

728x90

'코테 > 프로그래머스' 카테고리의 다른 글

프로그래머스 K번째수(JAVA)  (0) 2023.04.05
프로그래머스 체육복(JAVA)  (0) 2022.12.19
728x90

https://www.acmicpc.net/problem/1715

 

1715번: 카드 정렬하기

정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장

www.acmicpc.net

 

 

풀이)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.PriorityQueue;

public class Main_BJ_1715_카드정렬하기 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for(int i=0; i<n; i++){
            pq.offer(Integer.parseInt(br.readLine()));
        }
        int max = 0;
        while(pq.size()>1){
            int a = pq.poll();
            int b = pq.poll();
            pq.offer(a+b);
            max += a+b;
        }
        System.out.println(max);

    }//main
}

해당 문제는 greedy로 해결할 수 있다.

 

1. 카드를 priority queue에 넣어두고 차례로 뽑는다.(자동으로 오름차순 정렬!)

2. 그 후 priority queue에서 두 개씩 뽑으며 수를 더하고, 다시 priority queue에 넣어둔다.(누적합이기 때문)

3. 이때, 뽑은 두 수를 더한 값을 계속 누적해서 더해줄 변수에 넣어둔다.

4. 이 수를 출력하면 끝!

 

사실 본격적으로 풀기 전에 어쩌다보니 푸는걸 얼핏 들은적이 있어서... 금방 풀었디만...

혼자 아이디어를 생각했을땐 조금 헷갈렸을 것 같기도 하다.

 

다른 골드 문제도 정복해 봐야징!

728x90

'코테 > 백준' 카테고리의 다른 글

백준 10951 A+B - 4(JAVA)  (0) 2023.04.18
백준 2468 안전 영역(JAVA)  (0) 2023.04.12
백준 10844 쉬운 계단 수(JAVA)  (0) 2023.04.06
백준 1946 신입 사원(JAVA)  (0) 2023.04.06
백준 14503 로봇 청소기(JAVA)  (0) 2023.04.04
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/131530

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이)

SELECT (price div 10000)*10000 as price_group, count(*) as products
from product
group by price_group
order by price_group;

group by에 대해 배울 수 있는 문제였다.

항상 전체를 어떻게 다뤄야하나... 코딩만 하다보니 for문 돌려야하나... 이러는 것 같다

 

연습해야지 어쩌겠어!!

 

set @a = 0;

select (@a := @a + 10000) as PRICE_GROUP,
        (select count(*)
            from PRODUCT
            where @a <= price and price < @a+10000) as PRODUCTS 
    from PRODUCT
    where @a < price  
    order by PRICE_GROUP;

그리고 다른 분의 코드를 보게 되었다!!

이렇게도 쓸 수 있구나.. 신기하다....

 

 

SELECT TRUNCATE(price,-4) AS price_group, COUNT(product_id) AS products 
FROM product 
GROUP BY price_group 
ORDER BY price_group;

그리고 내림 함수인 truncate에 대해서도 배울 수 있었다.

 

참고할 블로그!

https://devjhs.tistory.com/87

 

[mysql] ROUND(),TRUNCATE() - 반올림과 버림

ROUND() , TRUNCATE() - 역할ROUND(숫자,반올림할 자릿수) - 숫자를 반올림할 자릿수 +1 자릿수에서 반올림 TRUNCATE(숫자,버릴 자릿수) - 숫자를 버릴 자릿수 아래로 버림 ※ 반드시 버릴 자릿수를 명시해

devjhs.tistory.com

 

728x90
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/131536

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이)

SELECT distinct a.user_id, a.product_id 
from online_sale as a join online_sale as b
on a.user_id=b.user_id and a.product_id=b.product_id 
where a.sales_date != b.sales_date
order by user_id, product_id desc;

self join으로 해보았다! self join은 처음 활용해봤는데 오묘하다...

 

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID, PRODUCT_ID DESC;

또한, group by를 사용해서 풀 수도 있더라..

 

 

SELECT USER_ID, PRODUCT_ID,count(*)
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID;

이 sql문을 작성해보면, 다음과 같은 결과가 나온다.

 

USER_ID PRODUCT_ID count(*)
2 21 1
2 26 1
2 30 1
4 27 1
5 12 1
7 1 1
7 5 1
12 7 1
13 27 1
14 18 1
15 12 2
19 26 1
20 24 1
22 8 1
23 7 1
23 26 1
24 2 1
27 3 1
29 15 1
29 26 1
34 6 1
35 8 1
37 1 1
41 1 1
42 9 1
42 19 1
42 30 1
43 6 1
45 15 1
46 1 1
50 24 1
52 15 1
53 12 1
54 11 1
55 30 1
56 28 1
57 11 1
57 25 1
58 11 1
58 26 1
59 14 1
60 15 1
61 20 1
62 29 1
65 19 1
66 4 1
66 21 1
68 1 1
68 6 1
68 15 1
70 27 1
72 12 1
73 8 1
73 21 1
73 25 1
74 9 1
78 4 1
78 6 1
78 19 1
81 20 1
84 8 1
87 24 1
88 28 1
90 24 1
91 21 1
92 26 1
93 3 1
98 3 1
99 27 1
101 9 1
102 18 1
103 29 1
108 27 1
109 5 1
109 13 1
110 9 1
111 30 1
113 15 1
114 1 1
114 12 1
117 7 1
117 12 1
117 22 1
118 1 1
119 12 2
120 4 1
120 29 1
121 14 1
123 14 1
123 25 1
126 9 1
126 21 1
127 29 1
131 19 1
133 17 1
134 18 1
134 22 1
134 26 1
138 4 1
139 9 1
140 4 1
143 15 1
145 8 1
149 8 1
151 26 1
152 7 1
154 7 1
154 29 1
157 30 1
160 23 1
162 30 1
163 6 1
170 24 1
170 25 1
177 9 1
180 30 1
183 14 1
184 24 1
189 25 1
190 25 1

 

 

처음에는 어떻게 이렇게 가능한거지.. 이해가 안 갔는데, 다음 블로그르 참고하면 이해하기가 좀 쉬울것이다!

 

 

https://codingdog.tistory.com/entry/sql-group-by-2%EA%B0%9C-%EC%9D%B4%EC%83%81-%EB%82%98%EB%88%8C-%EA%B8%B0%EC%A4%80%EC%9D%84-select-%EC%A0%88%EC%97%90%EB%8F%84-%EB%98%91%EA%B0%99%EC%9D%B4-%EC%A0%81%EC%96%B4%EC%A3%BC%EB%A9%B4-%EB%90%9C%EB%8B%A4

 

sql group by 2개 이상 : 나눌 기준을 select 절에도 똑같이 적어주면 된다.

요새 롯데 자이언츠의 상승세가 무섭습니다. 이번 년도에 가을야구 갈 거 같습니다. 초반부터 야구 이야기를 해서 죄송합니다. group by에서 2개 이상의 속성으로 그룹화를 하고 싶을 때 어떻게 해

codingdog.tistory.com

 

728x90
728x90

https://www.acmicpc.net/problem/10844

 

10844번: 쉬운 계단 수

첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

 

 

 

풀이)

import java.util.Scanner;

public class Main_BJ_10844_쉬운계단수 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        // dp[i][j]: i번째 자리수가 j일 때 계단수 값
        long[][] dp = new long[n+1][10];
        long mod = 1000000000;

        // 첫 번째 자리수는 1개
        for(int i=1; i<10; i++){
            dp[1][i] = 1;
        }

        for(int i=2; i<=n; i++){
            for(int j=0; j<10; j++){
                if(j==9){
                    dp[i][9] = dp[i-1][8]%mod;
                }
                else if(j==0){
                    dp[i][0] = dp[i-1][1]%mod;
                }
                else
                    dp[i][j] = (dp[i-1][j-1]+dp[i-1][j+1])%mod;
            }//j
        }//i

        long ans = 0;
        for(int i=0; i<10; i++){
            ans += dp[n][i];
        }
        System.out.println(ans%mod);
    }//main
}

솔직히 일일히 찾아보다가 어떻게 표현해야할지 몰라서 찾아봤다.

내가 찾은 방식이랑 비슷한 아이디어였는데, 결국 0과 9를 제외하고는 양 옆을 탐색한다는 것이다.

 

따라서 2차원 배열을 선언하고, dp[i][j]라면 i번째 자리수가 j일때 계단수 값을 의미한다.

예를 들어,,,

3XX라면, 34X와 36X를 봐야하므로... dp[i][j] = dp[i-1][j-1]+dp[i-1][j+1]이 점화식이 됨을 확인할 수 있다.

 

또한!!

dp는 long으로 잡아야 하고, ans 또한 mod 값으로 나눠줘야 한다는 사실을 잊지 말자!

 

 

참고 블로그

https://code-lab1.tistory.com/108

 

[백준] 10844번 쉬운 계단 수 (자바 풀이)

문제 https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 풀이 이 문제는 다이나믹 프로그래밍을 이용해서 해결할 수 있다. T

code-lab1.tistory.com

 

728x90

'코테 > 백준' 카테고리의 다른 글

백준 2468 안전 영역(JAVA)  (0) 2023.04.12
백준 1715 카드 정렬하기(JAVA)  (0) 2023.04.11
백준 1946 신입 사원(JAVA)  (0) 2023.04.06
백준 14503 로봇 청소기(JAVA)  (0) 2023.04.04
백준 1245 농장 관리(JAVA)  (0) 2023.04.04
728x90

https://www.acmicpc.net/problem/1946

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성

www.acmicpc.net

 

 

 

풀이)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main_BJ_1946_신입사원 {
    public static class person implements Comparable<person>{
        int paper;
        int interview;

        public person(int paper, int interview){
            this.paper = paper;
            this.interview = interview;
        }

        @Override
        public int compareTo(person p){
            return this.paper-p.paper;
        }
    }//person

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int t = Integer.parseInt(br.readLine());
        for(int tc = 0; tc<t; tc++){
            int n = Integer.parseInt(br.readLine());
            ArrayList<person> arr = new ArrayList<>();
            for(int i=0; i<n; i++){
                StringTokenizer st = new StringTokenizer(br.readLine());
                arr.add(new person(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
            }
            Collections.sort(arr);

            // 이미 오름차순 정렬을 했기 때문에, 마지막으로 합격한 사람보다 인터뷰 순위가 작으면 무조건 합격!
            // 서류는 이미 이전사람보다 클 것이고, 인터뷰 순위마저 큰다면 조건에 위배가 된다.

            int ans = 1;
            // 처음은 서류1등 인터뷰 성적
            int min = arr.get(0).interview;
            // 서류 2등 친구부터
            for(int i=1; i<arr.size(); i++){
                // 만약 기준 등수 보다 살펴보는 친구의 등수가 높다면? -> 선발
                // 가장 최근에 채용된 지원자의 면접 순위보다 높은 지원자 찾기
                if(arr.get(i).interview < min){
                    // 기준 등수 갱신
                    min = arr.get(i).interview;
                    // 선발
                    ans++;
                }
            }//for

            // 시간초과 나는 코드
//            for(int i=1; i<arr.size(); i++){
//                for(int j=0; j<i; j++){
//                    if(arr.get(i).interview < arr.get(j).interview){
//                        ans++;
//                        break;
//                    }
//                }
//            }//for
            sb.append(ans+"\n");
        }//tc
        System.out.print(sb);
    }//main
}

진짜 시간초과가 도저히 해결이 안 나서 여러 블로그를 읽어보고...

왜 저렇게 푸는지 생각한 것 같다.

 

일단... 절대절대 2중 for문 돌려서 해결할 생각 하지 말 것!!!!

시간초과가 난다...(N이 10만이라서 시간 초과 난다)

 

먼저, 서류 성적 순으로 정렬을 해준다!

Collections.sort는 NlogN으로 정렬을 해주기 때문에 시간초과 걱정은 할 필요 없다.

 

그리고 기준 변수를 정해주고, 확인하는 방식으로 해야한다.

이때, 변수란 마지막으로 합격한 사람의 인터뷰 성적이다.

 

이미 오름차순 정렬을 했기 때문에, 마지막으로 합격한 사람보다 인터뷰 순위가 작으면 무조건 합격!!!

서류는 이미 이전 사람보다 클 것이고(등수가 낮을 것이고), 인터뷰 순위마저 크다면 조건에 위배가 된다!

 

처음에는 이게 무슨소리인가... 했는데,,, 차근차근 보면 안다..

꼭 한 번 깊게 생각해보길ㅠㅠㅠ

 

어쨌든 이번 문제는,,, 실버1치고는 시간 초과 때문에 힘들었다...

문제 자체는 어렵지 않고, greedy로 할 수 있는 문제!

 

 

 

참고한 블로그...

https://dundung.tistory.com/69

 

백준 1946 신입 사원 Java

문제를 이해하는 것부터 나에겐 시간이 걸렸고 구현하는 데에도 여러 번의 시행착오를 겪었던 그리디 문제인 신입 사원이다. 흔히들 말하는 맞았는데 왜 틀리지.가 자동으로 연발됐던 문제였다

dundung.tistory.com

https://dy-coding.tistory.com/entry/%EB%B0%B1%EC%A4%80-1946%EB%B2%88-%EC%8B%A0%EC%9E%85-%EC%82%AC%EC%9B%90-java

 

백준 1946번 : 신입 사원 java

이 문제는 정렬을 이용하여 신입 사원을 뽑는 문제입니다. 이 문제에서 신입 사원을 뽑는 기준은 서류, 면접 등수가 둘 다 다른 지원자보다 낮은 사람은 뽑지 않는 것입니다. 이때 신입 사원이

dy-coding.tistory.com

 

728x90

'코테 > 백준' 카테고리의 다른 글

백준 1715 카드 정렬하기(JAVA)  (0) 2023.04.11
백준 10844 쉬운 계단 수(JAVA)  (0) 2023.04.06
백준 14503 로봇 청소기(JAVA)  (0) 2023.04.04
백준 1245 농장 관리(JAVA)  (0) 2023.04.04
백준 15903 카드 합체 놀이(JAVA)  (0) 2023.04.03
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42748

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이)

import java.io.*;
import java.util.*;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        for(int i=0; i<commands.length; i++){
            ArrayList<Integer> arr = new ArrayList<>();
            int start = commands[i][0]-1;
            int end = commands[i][1]-1;
            int find = commands[i][2]-1;

            for(int idx=start; idx<=end; idx++){
                arr.add(array[idx]);
            }
            Collections.sort(arr);
            answer[i] = arr.get(find);
        }
        
        return answer;
    }// solution
}

 

범위에 맞춰서 list에 저장해주고 collections.sort를 사용했다.

다른 풀이를 보니, CopyOfRange도 있더라!!

 

for(int i=0; i<commands.length; i++){
            int[] temp = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
            Arrays.sort(temp);
            answer[i] = temp[commands[i][2]-1];
        }

이렇게 활용할 수도 있다는 것!!

 

정렬 기초문제!!

728x90

'코테 > 프로그래머스' 카테고리의 다른 글

프로그래머스 최소직사각형(JAVA)  (0) 2023.04.12
프로그래머스 체육복(JAVA)  (0) 2022.12.19
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/131120

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

풀이)

SELECT member_id, member_name, gender, date_format(date_of_birth, "%Y-%m-%d") as date_of_birth
from member_profile
where gender = "W" and month(date_of_birth)="03" and tlno is not null
order by member_id;

월을 추출할 때 month()를 사용할 수 있다!

년은 year, 일은 day를 사용하면 된다.

 

그 외에도 hour, minute,,, 등등 다 있다!

신기한 sql의 세계...

 

 

 

참고한 블로그

https://gent.tistory.com/440

 

[MSSQL] 년, 월, 일 추출 방법 (YEAR, MONTH, DAY)

SQL Server에서 날짜 데이터의 년, 월, 일을 추출할 때 사용하는 기본적인 함수는 YEAR, MONTH, DAY이며, 정수로 결과를 반환한다. 앞의 세 가지 함수 외에도 DATENAME, DATEPART라는 함수도 있는데 DATENAME 함

gent.tistory.com

 

728x90
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/132201

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

풀이)

SELECT pt_name, pt_no, gend_cd, age, if(tlno is null, 'NONE', tlno)
from patient
where gend_cd = "W" and age<=12
order by age desc, pt_name;

MySQL에서는 if문 또한 사용이 가능하다!  =>  if(조건, 참일때 값, 거짓일때 값)

 

 

이렇게 대체도 가능하다

SELECT pt_name, pt_no, gend_cd, age, IFNULL(tlno, 'NONE') as tlno
from patient
where gend_cd = "W" and age<=12
order by age desc, pt_name;

tlno가 null일 때, 'NONE'으로 대체해주는 sql문이다.

이때, 컬럼며잉 변경되므로 alias를 해줘야한다.

 

 

 

참고 블로그

https://velog.io/@pm1100tm/MySQL-%EC%A1%B0%EA%B1%B4%EB%AC%B8-%EC%A0%95%EB%A6%AC

 

MySQL - 조건문 정리 (IF, IFNULL, ISNULL, CASE WHEN, NVL)

MySQL 조건문 정리

velog.io

 

728x90

+ Recent posts