이제 C언어 while문을 배워봅시다. for문과 더불어서, 꽤 많이 쓰이는 반복문입니다. do while까지가 3대장인데요. 저것은 사용 빈도가 그렇게 높지는 않은 듯 싶어요. 문법은 다음과 같습니다. while(contidion) s1 대충 condition을 만족하면 s1 블록을 수행하고, 다시 condition을 만족하는지 검사한다. 정도로 보시면 됩니다. 그러면 condition이 참이면 계속 루프를 돈다는 것이겠군요. 넵. 맞습니다. 그러니까 condition을 만족하면 Loop를 계속 돈다고 보시면 되겠습니다. 먼저 백준의 A+B-5를 봅시다. 이것은 a와 b를 입력을 계속 받습니다. 파일의 끝에 도달할 때 까지요. 즉, 어떠한 입력 파일이 n개의 줄로 이루어져 있다면 n번째 줄에 a(n) ..
분류 전체보기 검색 결과
코딩 테스트에서 next_permutation의 사용 빈도는 상당히 높을 겁니다. 특히 역량 테스트라고 불리는 것에서는요. 구현이 들어가면 대략 50% 정도는 조합, 순열 등에서 나오는데요. 그 때, 이전 순열이라던지 다음 순열을 구하기 위해서 쓰는 함수가 저 함수입니다. 이전 순열은 데이터를 조금 변형을 하면 구할 수 있고요. 그러면 이 함수가 어떻게 구현이 되어 있을까요? 만약에 레퍼런스 없이 구현하라고 하면 어떻게 해야 할까요? 단계별로 이해해 봅시다. 사실 이 함수의 복잡도는 O(n)입니다. 왜 그렇게 나올 수가 있는 것인지, 상대적으로 비효율적인 구현 방법으로 먼저 구현해 보고 이야기 하도록 하겠습니다. O(n^2)의 핵심 접근은, 결정 함수입니다. 이게 무슨 어려운 것이냐라고 생각하실 수도 있..
c언어에서 반복문은 3개가 있습니다. for, while, do while. 이 셋이 있는데요. 세 개를 차근차근 배워봅시다. 오늘은 그 중, 제가 백준이라는 사이트에서 제일 많이 쓴, for문을 알아보도록 하겠습니다. for(s1;condition;s2)for_block 문법은 위와 같은데요. condition1에는 조건문이 들어갑니다. 예를 들자면 i>=0이라던지, i!=0이라던지. 보통, 저는 s2는 반복 변수를 증가시키는 용도, 예를 들어서 i++과 같은 용도로 많이 쓰고요. s1은 루프 변수 초기화를 위한 용도로 씁니다. 그리고 for문도 블록이 있는데요. 중괄호로 쓸 수 있어요. 이걸 대략적으로 그려보면, s1을 수행합니다. 다음에 condition이 참이면 for block을 수행하고 s2를..
동시성과 병렬성은 차이가 조금 있어요. 오늘은 이 둘의 차이에 대해서 간단하게만 설명하고 넘어가도록 하겠습니다. 코어가 2개, 쓰레드가 2개 있는 cpu를 생각해 봅시다. 즉 HT가 적용이 되지 않은 cpu가 있다고 생각해 봅시다. 여기서 core를 '물건을 생산하는 기계' 정도로 생각합시다. 그것들은 1분에 하나씩 인형을 생산한다고 합시다. 그러면 코어가 1개 있으면 1분에 하나씩만 생산을 할 겁니다. 그런데 2개 있으면 1분에 2개, 3개가 있으면 1분에 3개씩 생산할 거에요. 이는 '인형을 만드는 일'을 기계가 병렬적으로 처리해서 가능한 것입니다. 그러면 경우에 따라서는, 어떠한 특정한 시점에, run 상태가 둘인 경우도 있을 거에요. 그러면 동시성은 무엇일까요? 동시성 하면, 항상 나오는 키워드가..
해시를 하기 전에, 비둘기집의 원리를 간단하게 짚고 넘어가겠습니다. 집이 k개가 있고 비둘기가 k+1마리가 있습니다. 그리고 비둘기들은 상자들 중 하나에 들어갔을 때, 이들이 2마리 이상 들어가는 집이 최소한 하나 존재합니다. 집 k개를 그려보았습니다. 그리고 밑에는 비둘기 k+1마리가 있어요. 그러면, 결론을 부정해 봅시다. '2마리 이상 들어가는 집이 최소한 하나 존재한다'는 명제의 부정은, 2마리 이상 들어가는 집이 존재하지 않는다입니다. 그러면 k+1마리가 있고, 집이 k개 있을 때, 많아봤자 1마리가 들어간다가 참이라고 해 봅시다. 즉 ~p가 참이다라고 한 겁니다. 그러면 각 상자에는 최대 1마리씩만 들어갈 수 있으니까, k개의 상자에는 최대 k마리가 들어갈 수 있습니다. 그러면 나머지 1마리는..
최근댓글