프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
7
8
9
10
11
12
  SELECT ANIMAL_ID, 
         NAME,
         CASE
              WHEN INSTR(SEX_UPON_INTAKE, 'Neutered'> 0 
                OR INSTR(SEX_UPON_INTAKE, 'Spayed'> 0 
              THEN 'O'
              ELSE 'X'
         END AS 중성화
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. SEX_UPON_INTAKE 컬럼에 'Neutered' or 'Spayed'

3. 아이디, 이름, 중성화 여부 조회

4. 아이디 순 조회

5. 중성화 O, X 표시

 

- INSTR: 문자열에서 문자를 찾으면 문자의 시작 위치를 반환

(Oracle은 첫번째 위치가 0이 아닌 1이므로 0보다 클 경우, 해당 글자가 있는 것)

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
  SELECT ANIMAL_ID, NAME,
         CASE
              WHEN REGEXP_LIKE(SEX_UPON_INTAKE, 'Neutered')
                OR REGEXP_LIKE(SEX_UPON_INTAKE, 'Spayed')
              THEN 'O'
              ELSE 'X'
         END AS 중성화
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
 
 

정규 표현식 사용

 

1
2
3
4
5
6
7
8
9
10
11
  SELECT ANIMAL_ID, NAME,
         CASE
              WHEN SEX_UPON_INTAKE LIKE '%Neutered%' 
              OR SEX_UPON_INTAKE LIKE '%Spayed%' 
              THEN 'O'
              ELSE 'X'
         END AS 중성화
    FROM ANIMAL_INS
ORDER BY ANIMAL_ID
;
 
 

Like 연산자 사용

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
SELECT COUNT(DISTINCT NAME) COUNT
FROM ANIMAL_INS
;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. 동물의 이름 개수 조회

3. 이름이 Null인 경우 조회하지 않음

4. 중복되는 이름은 1개로 집계

 

 

 

🔗 소스 코드
GitHub

 

 

13909번: 창문 닫기

서강대학교 컴퓨터공학과 실습실 R912호에는 현재 N개의 창문이 있고 또 N명의 사람이 있다. 1번째 사람은 1의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다.  2번째 사람은 2의 배수 번째

www.acmicpc.net

 

Language: Java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int N = Integer.valueOf(br.readLine());
 
        int count = 0//창문이 열려있는 개수
        for(int i = 1; i * i <= N; i++) { //제곱수만 카운트
            count++;
        }
 
        br.close();
 
        bw.write(count + "\n");
 
        bw.flush();
        bw.close();
    }
 
}
 
 

🤔 해설

1. for(int i = 1; i * i <= N; i++) { ... }

    - 약수의 개수가 홀수인 경우는 제곱수

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int N = Integer.valueOf(br.readLine());
 
        br.close();
 
        bw.write(((int) Math.floor(Math.sqrt(N))) + "");
 
        bw.flush();
        bw.close();
    }
 
}
 
 

1. bw.write(((int) Math.floor(Math.sqrt(N))) + "");

    - 제곱수의 개수 = 제곱근의 내림값

 

 

 

🔗 소스 코드
GitHub

 

📚 참고 자료

 

[JAVA] 백준 13909. 창문 닫기

※개인공부목적의정리글입니다.이글의내용이최선의해답은아닐수있습니다.문제서강대학교컴퓨터공학과실습실R912호에는현재N개의창문이있고또N명의사람이있다.1번째사람은1의배수번째창문

yuria.dev

 

 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
SELECT COUNT(*) COUNT
  FROM ANIMAL_INS
;
 
 

🙂 확인 사항

1. ANIMAL_INS 테이블

2. 동물 마리 수 조회

 

⭐ 집계함수는 Null 제외

 

 

 

🔗 소스 코드
GitHub

 

 

프로그래머스

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

programmers.co.kr

 

Language: Java

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Arrays;
import java.util.Comparator;
 
class Solution {
    public String[] solution(String[] strings, int n) {
        
        // 1. 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬
        // 2. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순 정렬
        
        String[] answer = {};
        
        Arrays.sort(strings, new Comparator<String>() {
            
            public int compare(String s1, String s2) {
                int result = Integer.compare(s1.charAt(n), s2.charAt(n));
                if (result == 0) {
                    result = s1.compareTo(s2);
                }
                return result;
            };
            
        });
        
        return strings;
    }
}
 
 

🤔 해설

1. new Comparator<String>() { ... }

    - 정렬 기준 Overriding

2. int result = Integer.compare(s1.charAt(n), s2.charAt(n));

    - index위치에 따른 1차 비교

3. if (result == 0) { ... }

    - 사전순 2차 비교

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
 
class Solution {
        public String[] solution(String[] strings, int n) {
        
        // 1. 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬
        // 2. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순 정렬
        
        String[] answer = {};
 
        List<String> list = new ArrayList<>();
        for (int i = 0; i < strings.length; i++) {
            list.add(strings[i].charAt(n) + strings[i]);
        }
        
        Collections.sort(list);
        answer = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i).substring(1, list.get(i).length());
        }
        
        return answer;
    }
}
 
 

1. list.add(strings[i].charAt(n) + strings[i]);

    - 1차 정렬대상을 문자열 앞에 추가

2. answer[i] = list.get(i).substring(1, list.get(i).length());

    - 결과값 return 전 추가한 문자열 제거

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
    public String[] solution(String[] strings, int n) {
      
    // 1. 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬
    // 2. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순 정렬
      
    List<String> list = Arrays.asList(strings);
        
    list.sort((a, b) -> {
        int result = (a.split(""))[n].compareTo((b.split(""))[n]);
        
        if(result == 0)
            return a.compareTo(b);
        
        return result;
    });
        
    return list.toArray(new String[0]);
 
  }
}
 
 

1. List<String> list = Arrays.asList(strings);

    - List → Arrays

2. int result = (a.split(""))[n].compareTo((b.split(""))[n]);

    - 문자열을 문자 단위로 쪼개서 배열로 변환

3. return list.toArray(new String[0]);

    - Arrays → List

    - new String[0]: 매개변수로 배열의 타입을 지정

    - toArray: List의 크기에 따라 필요한 크기의 새 배열을 생성

 

 

 

🔗 소스 코드
GitHub

 

📚 참고 자료

 

프로그래머스

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

programmers.co.kr