습관1
다른 관점으로 보기위해서는 내가 먼저 다른 사람이 되어야만 한다.
습관 2
죽었을때 어떤 사람이었으면 좋겠는지를 먼저 정한 후 그 사람이 되기 위한 인생의 로드맵을 작성한다.
끝에 가서 살고싶은 라이프스타일을 정의하고 현재 할 수 있는 것부터 그 행동을 실천해 습관을 만들어 나간다.
남들이 써준 각본대로 살지 않고, 본인에게 맞는 각본을 새로 써라.
습관1
다른 관점으로 보기위해서는 내가 먼저 다른 사람이 되어야만 한다.
습관 2
죽었을때 어떤 사람이었으면 좋겠는지를 먼저 정한 후 그 사람이 되기 위한 인생의 로드맵을 작성한다.
끝에 가서 살고싶은 라이프스타일을 정의하고 현재 할 수 있는 것부터 그 행동을 실천해 습관을 만들어 나간다.
남들이 써준 각본대로 살지 않고, 본인에게 맞는 각본을 새로 써라.
1장 - 코딩테스트, 어떻게 준비할까?
코딩테스트 시험볼때 IDE를 사용하므로 IDE로 연습해 익숙해지는 것이 좋다.
코드업, 백준온라인 저지, 프로그래머스 기출문제 활용
시간복잡도
보통 O(N^3)을 넘어가면 문제풀이에 이용하기 힘들다.
10억 연산횟수 - 1초 걸리고, 보통 1~5초 이내에 완료되어야 한다.
시간복잡도에서 연산은 사칙연산, 비교연산등의 기본연산을 위한다. 비교연산도 들어가는 것에 주의
N의 범위에 따라 N , N^2 , N^3 사용 가능한 것이 달라진다.
공간복잡도
메모리 사용량을 의미하고, 코딩테스트에서는 보통 128~258 MB의 제한이 있다.
보통 데이터 갯수가 1000만 단위가 넘어가면 이 제한을 넘는다.
시간과 메모리 측정이 가능한 코드가 존재한다.
2장 - 16~20년도 코딩테스트 기출 분석
코딩테스트에서는 주로 기초알고리즘에 기반하는 문제 출제
출제 빈도 순서 : 그리디 > 구현 > DFS/BFS 이용 탐색문제 > 정렬 > 다이나믹 프로그래밍 > 이진탐색 > 최단경로 순
시간이 촉박할 수 있으나, 절반이상을 맞추면 보통 통과
채용프로세스
서류검토 - 코딩테스트 - 기술면접 - 인성면접
대기업은 코딩테스트에, 스타트업은 기술면접에 비중 (대기업은 경험보다 문제해결능력, 스타트업은 경험중시)
기술면접
알고리즘 문제풀이와 질의응답 - 코딩테스트 내용토대로 면접진행, 접근방식과 풀이방식을 논리정연하게 설명해야함
-> 어떤 상황에 어떤 알고리즘을 사용하는지 적어둔 부분을 익혀둘 것 (특정한 상황에 무엇이 좋은지 판단할 수 있어야)
포트폴리오 질의응답
->게임회사 취업고려시 포트폴리오 완성, 문서화 (프로젝트당 1~2장 분량으로 개발과정 문서로 정리, 문제점과 해결방법 배운점 정리, 깃허브에 소스코드 올리고 배포경험 ,AWS 등 클라우드 서비스 이용했으면 이력서 기술)
컴퓨터공학 지식 질의응답
운영체제나 컴퓨터 아키텍쳐, 개발방법론 등 알고리즘을 제외한 질문은 보통 직무에 관련된 내용을 물어보므로 관련 분야의 지시을 중점으로 알아둘 것.
깃허브
깃허브에 만든 프로젝트와 백준 온라인 저지에서 푼 정답 소스코드를 정리해서 올리는 것이 좋다.
잔디밭 - 성실함을 어필할 수 있음
인성질문 리스트
개발하면서 행복했던점 - 얼마나 개발에 열정이 있고 재미를 느끼는지 보고싶은 것
자신이 가장 열정적으로 참여한 프로젝트 - 내가 맡은 임무에서 어려운점, 해결한점 , 배운점 (실력향상) 을 이야기할 것
회사에 궁금한 것 - 개발자의 성향중에서 긍정적인 부분 이끌어낼만한 것 ( 수면공간 - 문제를 끝까지 해결하는 성격이라 수면공간 있으면 좋다~ 식으로 )
Hello World 출력하기
C
사용하기 어려움
읽기 더 어려움
printf("Hello, %s %d \n","world",123);
C++
사용하기 더 쉬움
읽기도 더 쉬움
std::cout << "Hello, " << "world" << 123 << std::endl; ( <<은 <- 로 밀어넣는다고 생각하면됨 )
네임스페이스 (namespace)
어떤 공간을 정의하고 이름을 정해준다 , 동일한 이름의 것을 다른 공간에 정의하면 다른것으로 본다
함수 , 클래스 등의 충돌을 피하기위해 만들어진것
using 지시문
타이핑의 양을 줄이는 방법일뿐
using namespace std;
cout<< "Hello,World! " << endl; // std:: 생략가능
#pragma once // 이렇게하면 헤더가 한번만 #include 됨 #ifndef ... #endif 대체
<< 연산자 (operator)
출력연산자 , 밀어넣는 연산자 , push 연산자
+ 혹은 - 등과 같은 연산자 중 하나
C++에서는 프로그래머가 연산자의 동작을 바꿀 수 있다
출력 형식 지정 ( Output Formatting )
16진수 출력
C
int number = 10;
printf( "$#x\n" , number ); // 쉽게 안읽힘
-> Manipulator( 조정자 ) 도입 -> 내가 원하는것을 하게만드는것
C++
int number = 10;
cout << showbase << hex << number << endl;
조정자( Manipulator )
showpos / noshowpos - positive (양수) 숫자가 양수이면 + 사인 보여줘
cout << showpos << number; // +123
cout << noshowpos << number; // 123
dec / hex / oct - 10진수 /16진수/8진수
cout << dec << number; // 123
cout << hex << number; // 7b
cout << oct << number; // 173
uppercase / nouppercase - 대문자로 바꿔라 / 대문자로 바꾸지마라
cout << uppercase << hex << number; // 7B
cout << nouppercase << hex << number' // 7b
showbase / noshowbase - 몇진법인지 표기해줘라 / 표기하지 말아라
cout << showbase << hex << number << endl; // 0x7b
cout << noshowbase << hex << number << endl; // 7b
left / internal / right - 왼쪽정렬 / 부호는 제일왼쪽 숫자는 맨오른쪽 정렬 / 오른쪽 정렬
number 변수값이 -123이라면
cout << setw(6) << left << number; // -123
cout << setw(6) << internal << number ; // - 123
cout << setw(6) << right << number; // -123
showpoint / noshowpoint - 소수점 이하를 보여준다 / 안보여줄수 있으면 보여주지말아라
decimal1의 값이 100.0 , decimal2의 값이 100.12 라면
cout << noshowpoint << decimal1 << " " << decimal2; //100 100.12
cout << showpoint << decimal1 << " " << decmal2; // 100.000 100.120
fixed / scientific - 고정적인 실수표기법 / 과학적인 표기법
number 의 값이 123.456789라면
cout << fixed << number; // 123.456789
cout << scientific << number; // 123.4568E +02
boolalpha / noboolalpha - 불리언값을 알파벳으로표기 / 숫자로표기 (true false 1 0)
bready 값이 true 라면
cout << boolalpha << bReady; // true
cout << noboolalpha << bReady // 1
#include <iomanip> 안에있는 조정자
setw() - 컬럼수 정해준다
number의 값이 123 이라면
cout << setw(5) << number; // __123
setfill() - 빈공간을 다른캐릭터로 채워달라
cout << setfill ('*') << setw(5) << number; // **123
setprecision() - 유효자리 몇자리까지 보여줄건지 ( 반올림 )
number의 값이 123.456789라면
cout<< setprecision(7) << number ; // 123.4568
* fixed가 없는경우엔 정수부 + 소수부 기준으로 반올림하여 출력
fixed가 있는 경우엔 소수부만을 기준으로 반올림하여 출력함
메뉴를 출력해보자
#include<iomanip>
const float coffeePrice = 1.25f;
const float lattePrice = 4.75f;
const float breakfastComboPrice = 12.104f;
const size_t nameColumnLength = 20; // 컬럼 길이설정 size_t는 정수절대값의미하는 자료형
const size_t priceColumnLength = 10;
cout << left << fixed << showpoint << setprecision (2); // 조정자는 이 한줄에서만 영향을 미치는것이 아니라 뒤에 나오는 모든 출력에 영향을 미친다
cout<< setfill( '-' ) << setw(nameColumnLength + priceCoulumnLength) << "" << endl << setfill ( ' ' );
cout << setw(namecolumnLength) << "Name" << setw( priceColumnLength ) << "Price" << endl;
cout << setw(nameColumnLength) << "Coffee" << "$" << coffeePrice << endl;
cout 멤버 메서드 - 조정자를 함수로 쓰는방법 ( 알고만 )
조정자
cout << showpos << number;
멤버메서드
cout.setf(ios_base::showpos);
cout <<number;
조정자
cout << setw(5) << number;
멤버메서드
cout.width(5);
cout <<number;
네임스페이스 ios_base
setf() , unsetf()
width() , fill() , precision()
그리많이 사용되지 않음
setf(flag) / unsetf(flag)
인자 - boolalpha , showbase , uppercase , showpos
setf( flag , flag )
첫번쨰인자 - dec , oct , hex / fixed , scientific / left , right , internal
두번째인자 - basefield / floatfield / adjustfield