반응형

문제출처

https://programmers.co.kr/learn/courses/30/lessons/42840


문제풀이

배열을 이용해 수포자가 찍는 방식을 입력하고 mod연산을 통해 정답갯수를 알아내는 문제


소스코드


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
#include <vector>
#include <algorithm>
 
using namespace std;
 
vector<int> solution(vector<int> answers) {
    vector<int> answer;
    vector<int> supoja1={1,2,3,4,5}; // 5
    vector<int> supoja2={2,1,2,3,2,4,2,5}; // 8
    vector<int> supoja3={3,3,1,1,2,2,4,4,5,5}; // 10
 
    int cnt1=0, cnt2=0, cnt3=0;
    int idx1=0, idx2=0, idx3=0;
 
    for(int i=0; i<answers.size(); i++) {
        idx1=i%5, idx2=i%8, idx3=i%10;
        (answers[i] == supoja1[idx1]) ? ++cnt1 : cnt1;
        (answers[i] == supoja2[idx2]) ? ++cnt2 : cnt2;
        (answers[i] == supoja3[idx3]) ? ++cnt3 : cnt3;
    }
 
    int maxCnt = max(cnt1, max(cnt2, cnt3));
    if(maxCnt == cnt1) answer.push_back(1);
    if(maxCnt == cnt2) answer.push_back(2);
    if(maxCnt == cnt3) answer.push_back(3);
 
    return answer;
}
cs


반응형

'Algorithm' 카테고리의 다른 글

[BOJ 10872] 팩토리얼  (0) 2019.07.03
[프로그래머스 12936] 줄 서는 방법  (0) 2019.04.23
[BOJ 1655] 가운데를 말해요  (0) 2019.04.16
[BOJ 1157] 단어공부  (0) 2019.04.15
[BOJ 2675] 문자열 반복  (0) 2019.04.15
반응형

두 메소드 모두 Object의 값을 String으로 변환하지만 변경하고자 하는Object가 null인 경우 다르다.
toString()과 같은 경우 Null PointerException(NPE)을 발생시키지만 valueOf는 "null"이라는 문자열로 처리한다.

즉 비교해서 정리하자면
  • String.valueOf() - 파라미터가 null이면 문자열 "null"을 만들어서 반환한다.
  • toString() - 대상 값이 null이면 NPE를 발생시키고 Object에 담긴 값이 String이 아니여도 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
destItemMap.get("LOWER_VAL") 이 null 일 경우
String lowerCoatingVal1 = String.valueOf(destItemMap.get("LOWER_VAL"));
String lowerCoatingVal2 = destItemMap.get("LOWER_VAL").toString();
 
lowerCoatingVal1 = "null"
lowerCoatingVal2 = NullPointerException 발생
 
String.valueOf()의 null 체크
String lowerCoatingVal1 = String.valueOf(destItemMap.get("LOWER_VAL"));
if("null".equals(lowerCoatingVal1)) {
    // To do Somting....
}
 
// equals함수를 사용할때 왼쪽에 있는 것을 기준으로 비교하기 때문에 변수보다는 문자열을 왼쪽에 두는 것을 추천한다.
// 즉 strTestVal이 null인 경우 ret = "1"인 if문은 NPE를 발생시킨다.
String strTestVal = null;
String ret = "";
 
/* Exception 발생 */
if!(strTestVal .equals("")) ) ret = "1";
 
/* 정상 */
if!("".equals(strTestVal)) ) ret = "2";
 
cs

다시 말해 두가지 메서드의 차이점은 null값에 따른 NPE의 발생 유무이다.

이런 차이점 때문에 valueOf의 null체크 방법은 "null".equals(string) 형태로 체크를 해야한다.

null로 인해 발생된 에러는 시간이 지나고, 타인의 소스인경우 디버깅하기 어렵고 어떤의미를 내포하고 있는지 판단하기 어렵다. 때문에 NPE를 방지하기 위해 toString보다는 valueOf를 사용하는 것을 추천한다.


반응형
반응형

  1. 옵티마이저의 개념
사용자가 실행한 SQL을 해석하고 데이터를 추출하기 위한 실행계획을 수립하는 프로세스
오라클은 RBO(Rule Based Optimizer)와 CBO(Cost Based Optimizer)를 제공하고 나머지 DBMS는 CBO만을 제공함
  1. 옵티마이저의 종류
1) RBO
기본적으로 15개의 순위가 매겨진 규칙이 존재(이를 기초로 해서 실행계획을 수립)
SQL에 대한 실행계획이 하나 이상일 경우 순위가 높은 규칙을 이용한다.
수립될 실행계획이 예측 가능하기 때문에 개발자가 원하는 처리 경로로 유도하기가 쉽다.

2) CBO
 대상 row들을 처리하는데 필요한 자원 사용을 최소화해서, 궁극적으로 데이터를 빨리 처리하는데 목적이 있음.
CBO는 통계정보를 기반으로 비용을 산정하는데 CBO의 성능을 최적의 상태로 유지시키기 위해서 테이블, 인덱스, 클러스터 등을 대상으로통계정보를 생성하는것이 중요하다(ANALYZE 작업)

             ANALYZE 의 예
            

            ANALYZE 실행 여부 확인
            

  1. RBO와 CBO의 실행계획 비교
            

            CBO에서의 실행계획
            

            RBO에서의 실행계획
            

실행계획을 보면 CBO와 RBO가 조인 순서가 다름을 알 수 있다. 이를 트리형태로 나타내보면 다음과 같다.

            

 CBO를 보면 2번의 테이블(DEPT)을 먼저 읽고 4번이 조인형태로 연결이 된다. 하지만 RBO를 보면 3번 테이블(EMP)을 먼저 읽는다. 즉 where절에 있던 테이블을 기준으로 먼저 읽었다.
            
        



반응형

'Database' 카테고리의 다른 글

[프로그래머스 59045] 보호소에서 중성화한 동물  (0) 2020.04.29
[SQL 튜닝] 1. 실행계획(Execution plan)  (2) 2019.04.22
오라클 다중 WHERE조건  (0) 2018.06.25
무결성 (Integrity)  (0) 2018.01.12
JOIN (조인)  (0) 2018.01.12

+ Recent posts