문제풀이 시 20~30분 고민했는데 답이 안나오면 과감하게 답을 봐라 (외우다시피 봐도 됨)

코드 이해하고 혼자서 다시 스스로 짜본다

체크해놓고 나중에 반드시 다시 풀어야 함

답을 보든 안보든, 저번에 풀었든 안풀었든 끝까지 풀었다는 것이 제일 중요하다.

완전 탐색 - 시간이 없다면 오직 완전 탐색만 풀어라

  • for문 사용
  • 순열, 조합 사용
  • 재귀함수 사용(DFS)
  • 비트마스크 사용

시뮬레이션, BFS, DFS, DP가 중요함 - 어딜가든 요즘 DP 한 문제씩 나옴

  • DP가 합격 기준을 가르는 결정적인 요소라는 생각은 안듭니다. 코테는 어디까지나 서류 다음에 떨구는 요소이기 때문에 기본 문제만 잘 풀면 코테 정도는 다 통과되는듯(네카라 급은 제외) ->DP는 1억 급의 매우 큰 단위로 출제됨
  • 코테가 너무 쉽게 나왔다면 서류에서 미완성이 보였지만 서류합이 어거지로 된 사람을 떨구는 거 같음

그리디 알고리즘 (개인적으로 아래 문제를 풀고 느낌 잡음)

백준 1931 회의실 배정

백준 11000 강의실 배정

 

 

그래프,MST(최소신장트리), 다익스트라, 분할정복, 백트래킹, 투포인터(프로그래머스 보석 쇼핑)

 

프로그래머스(여기 1~2레벨은 기본으로 다 풀어야함. 3~4 풀 정도면 마스터)

programmers.co.kr/

 

백준에 있는 삼성 기출 문제집 풀기

https://www.acmicpc.net/workbook/view/1152

 

혹은 SWEA 모의 문제 풀기

https://www.swexpertacademy.com/

 

백준 DP 모음

www.acmicpc.net/workbook/view/2163


입출력속도 개선

ios_base::sync_with_stdio(false);

cin.tie(NULL);

cout.tie(NULL);


C++(STL 정리)

 

pair : utility에 있지만, algorithm, vector같은 헤더파일에서 이미 포함함


정적배열 사이즈 구하기 -> 그런거 없음. arr.length, arr.size 존재X


벡터

벡터 선언시 : vector<pair<float,int>> vp;

벡터 선언(갯수 명시) vector<int> vp(5); -> 5칸 생성
벡터 선언(갯수 명시, 초기값 명시) vector<int> vp(5,2); -> 5칸을 모두 2로 초기화

2차원 벡터 선언 : vector<vector<int>> v(5,vector<int>(5,0)); -> 5x5칸을 0으로 초기화

 

벡터 삽입시: vp.push_back(make_pair(2,3));


벡터 원소 뒤집기 : reverse(vp.begin(), vp.end());

 

벡터 삭제 : v.erase(v.begin()+3);

벡터 범위삭제 : v.erase(v.begin()+1, v.begin+3);

 

벡터 정렬 : sort(vp.begin(), vp.end())

 

벡터 iterator소환 : vector<pair<int, string>>::iterator iter;
iterator 활용 : for(iter = vp.begin(); iter!= vp.end(); iter++)

 

vp.back()++; 로 방금 집어넣은 값 가감 가능


map

key/value 구성

 

 

map<char,int> m;

 

size

empty

begin,end,

m.insert(make_pair(k,v)) -------> push_back이 아님을 주의하라

  • m.insert(make_pair('A', 1));
  • m.insert(v.begin(), v.end()); -> 벡터의 모든 값들을 추가

erase

  • m.erase(3) -> key값이 3 인 원소 삭제
  • m.erase(m.begin()) -> iterator를 넘겨서 삭제, 여기선 첫 번째 원소 삭제

find

count = key가 k인 노드의 개수 return

 

 

if( m.find('B') != m.end() ) --> 존재한다면

 

map 전체를 순회하며 key와 value 출력하는 두 가지 방법

1. iterator 지정

  • map<char, int>::iterator it;
  • for(it = m.begin(); it != m.end(); it++)
    • { it->first / it->second }

2. auto 키워드 사용

  • for(auto it = m.begin(); it != m.end(); it++)
    • { it->first / it->second }

 


set

key만 존재(정렬된 집합, 중복X)

 

set<int> s;

 

size

empty

begin,end,

s.insert(k) -------> push_back이 아님을 주의하라

  • s.insert(1);
  • s.insert(v.begin(), v.end()); -> 벡터의 모든 값들을 추가

erase

  • s.erase(3) -> 값이 3 인 원소 삭제
  • s.erase(m.begin()) -> iterator를 넘겨서 삭제, 여기선 첫 번째 원소 삭제

find

s.count(k) = 값이 k인 노드의 개수 return


벡터에서 최댓값, 최솟값 찾기(#include<algorithm>)

int min  = *min_element(vec.begin(), vec.end());

int max = *max_element(vec.begin(), vec.end());


스택

입력 : push

삭제 : pop

조회 : top


입력 : push

삭제 : pop

조회 : front/back


memset 활용
#include<cstring>
bool check[50];
memset(check, false, sizeof(check)); 모두 false로 초기화


string을 쪼개면 나오는 str[0] = char형임!


#include<cmath>

pow(3,2) => 9 / sqrt(36) => 6 ////////둘 다 double로 나오는걸 알아야해


SQL(ORACLE 기준)

 

TO_CHAR(sysdate,'MMDDYYYYHH24MISS')

EXTRACT(HOUR FROM CAST(DATETIME AS TIMESTAMP)

DATETIME(연,월,일)
TIMESTAMP(세세한시간까지)

NVL(NAME, 0) -> NULL일경우 0으로 출력
NVL2(NAME, y, n) -> NULL아니면 Y, NULL이면 N 출력
DECODE(NAME, NULL, 'N', 'Y') -> NULL이면 N, NULL아니면 Y 출력


LEFT OUTER JOIN (왼쪽은 모두 조회, 오른쪽은 맞는 조건만)

UPPER(대문자전환)
LOWER(소문자전환)

★복습필요★ 
1. LIKE

2. CASE WHEN ~~ LIKE 'Intake%' THEN 'X'
WHEN ~~
WHEN ~~
ELSE 'O'
END
AS 중성화

+ Recent posts