분류 전체보기 88

[완벽한 공부법] 의식적 노력에 관한 경험

완벽한 공부법을 읽고, 신영준 박사님의 여러 강의들을 읽으면서 '의식적 노력' 이라는 말에 대한 이해가 평소에 많이 부족했었다. 무엇을 이야기하는것인지 제대로 알기 위해서 팟캐스트와 각종 강의영상들을 계속 들었지만, '의식적 노력'을 해낸 사람들의 이야기는 사실 그 순간의 동기부여만 될 뿐 나에게 가까운 이야기로는 들리지 않았다. 그동안 의식적 노력을 해야 한다고만 생각하고, 실천하지 않았다. 성장하고 높은 곳으로 올라가기 위해서는 임계점을 넘어야 한다고 한다. 임계점이란, 내가 여태까지 넘어본적이 없는 노력의 양이다. 평소 임계점을 넘어야 되겠다고 생각을 하면서도 이 또한 어떻게 마음을 가지고 실천해 나가야 되는지 잘 알지 못했다. 그런데 올해 상반기 면접 준비를 하면서 느낀 점이 있다. 처음에는 단순..

보고 쓴 것들 2018.05.01

[C++] STL - pair, tuple, bitset 사용방법

pair pair는 다양한 타입의 데이터 2개를 쌍으로 저장 할 수 있도록 해 주는 컨테이너다. 사용하기 위해서는 utility를 include 해줘야 된다. 멤버변수로는 first, second 두가지만 있으며 swap, assign operator, make_pair 등의 함수를 지원한다. unordered_map에서 사용된다. 선언방법, 멤버함수 사용방법, 멤버변수 접근방법 등은 아래 코드를 참고하면 된다. 12345678910111213141516171819202122232425#include #include using namespace std; int main(){ //선언 pair aPair; //선언과 대입 pair bPair (15, "hello"); //make_pair를 이용해 assi..

개발자의 길 2018.04.06

[Algorithm]백준 - 스타트와 링크

https://www.acmicpc.net/problem/14889 알고리즘 설명은 주소 참고 N이 작기 때문에 Brute force 방법을 이용해 풀기로 했고 모든 팀 조합을 조사해서 min 값을 출력하면 된다고 생각했다. 이 문제의 핵심은 조합 (Combination)을 짧은 시간 내에 구할 수 있느냐다. 순열과 조합에 대한 개념은 아래 글을 참고해주길 바란다. (글 작성중) 코드는 아래와 같다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909..

[Algorithm] 해커랭크 - Recursion: Davis' Staircase

https://www.hackerrank.com/challenges/ctci-recursive-staircase/problem N개의 계단이 주어졌을 때 1, 2, 3번의 걸음으로 가는 모든 경우의 수를 구하는 문제다. 처음에는 DFS를 이용하는 줄만 알고 재귀호출을 이용한 DFS를 구현해서 풀었으나 타임아웃이 나와 2시간이나 헤메었다. 도저히 생각이 안나 해당 문제의 Discussions 게시판을 참고했고, 알고보니 이 문제는 아래의 피보나치 수 구하는 문제와 매우 비슷한 문제였다. 나는 피보나치 수열이 점화식으로 표현이 된다는 점은 알고 있었지만 점화식에 대한 응용법과 정확한 개념을 알지 못했었다. 그래서 이 문제를 풀면서 이 문제가 점화식을 활용한 DP 풀이로 해결할 수 있을 거라고 생각하지 못했다..

[Algorithm] 해커랭크 - Hash Tables: Ice Cream Parlor

https://www.hackerrank.com/challenges/ctci-ice-cream-parlor/problem N개의 아이스크림들 중 서로 다른 2개를 골라야 하는데, 주어진 Money와 두 아이스크림 가격의 합이 같은 경우를 찾는 것이다. 아이스크림은 정수의 나열로 주어지며 아이스크림의 ID는 그 수의 순서, 아이스크림의 가격은 그 수가 된다.(단 1번째 아이스크림부터 순차적으로 검사) 문제 설명이 애매한것인지, 내가 영어를 못해서인지 모르겠는데 문제 이해만 하는데 너무 오래 걸렸다. 단순한 두 수의합 문제이므로 순차적으로 검사하되 첫번째 아이스크림을 고른 다음에 해시 테이블을 이용해 (Money - 첫 아이스크림 가격)과 같은 가격의 아이스크림 ID(순서)를 찾으면 된다. 즉 Key = 아..

소수 판별법, 왜 루트 N 이하의 수만 나눠보면 되는 것일까?

에라토스테네스의 체 라는 개념을 읽어보면 n이 소수인지 아닌지 판별하기 위해서는 sqrt(n) 이하의 수만 나눠보면 된다고 한다. (sqrt는 루트를 의미함) 근데 왜 sqrt(n) 이하의 수를 나눠보면 알 수 있는 것인가? 감으로는 알 것 같으면서도 손으로 증명해 보려고 하니 잘 이해가 가지 않았고, 명쾌하게 해답을 주는 정보를 찾지 못해서 직접 생각해 보다 답이 나와 포스팅을 한다. 어떤 수 X가 합성수라고 하자. 그럼 X는 M x N의 형태로 나타날 수 있다. 그럼 여기서 M >= N 이라고 하자. 그럼 아래와 같은 식이 성립한다. -> X = M x N -> M x M >= M x N .... (N M^2 >= X (M x N = X) -> M >= sqrt(X) 즉 어떤 수 M의 최소값은 sqr..

문제 해결 2018.03.28

[Algorithm] 해커랭크 - Time Complexity: Primality

https://www.hackerrank.com/challenges/ctci-big-o/problem 주어진 수가 소수인지 아닌지 판별하되, O(sqrt(n)) 시간안에 답을 내야하는 문제다. 에라토스테네스의 체라는 방법을 알아보면, n이 소수인지 아닌지 판별하기 위해서는 sqrt(n) 이하의 수만 나눠보면 된다고 한다. 왜 sqrt(n)이하의 수만 나누어 보면 되는지는 포스트 http://makedotworld.tistory.com/13 를 참조하길 바란다. 코드는 아래와 같다. 123456789101112131415161718192021222324252627282930313233void isPrime(int number){ bool isprime = true; if(number == 1) { cout

[Algorithm] 해커랭크 - Sorting: Comparator

https://www.hackerrank.com/challenges/ctci-comparator-sorting/problem 주어진 구조체 player를 정렬하되, 첫번째로 멤버변수 score를 내림차순으로 정렬하고 만약 score가 같으면 멤버변수 name을 사전순으로 정렬하도록 하는 함수를 만드는 것이다. 간단하게 두 변수를 비교하는 compareBySN(p1, p2) 함수를 만들어 첫번째 파라미터가 더 앞에 오는 조건이면 true, 아니면 false를 반환하게 구현한 다음 STL algorithm 안에 내장되어 있는 sort를 사용하면 된다. algorithm::sort 함수의 사용방법은 다음과 같다. sort(배열의 첫 주소, 배열의 마지막 주소, 비교에 사용할 함수이름) 그리고 string::c..

[Algorithm] 해커랭크 - Bit Manipulation: Lonely Integer

https://www.hackerrank.com/challenges/ctci-lonely-integer/problem 수열이 주어졌을 때 똑같은 값이 딱 하나인 녀석을 찾는 문제다. 아주 짧은 코드로 구현할 수 있었는데, 비트연산의 활용법을 잘 몰라서 약간 긴 코드가 되어버렸다 주어질 수 있는 수는 100 이하로 100개의 배열을 준비한 후 수열을 처음부터 탐색하면서 배열[수열의 값] 의 값을 1씩 증가시킨 후, 배열의 값이 1인 index를 리턴하는 방식으로 구현했다. 1234567891011121314int lonely_integer(vector a) { int numLength = 100; int isPair[numLength] = {}; for (int i = 0; i

반응형