Leetcode/Interview Prep. 3

Number to Formatted String.

Q. 주어진 숫자 num 을 세 자리마다 ","로 구분되어지는 숫자 string으로 출력하라. 예) 1234567 => "1,234,567" Solution 문제 자체는 딱히 어려움이 없다. 마지막 자리수 구하는 방법으로 string을 만들어 나가고, 3자리마다 ","를 더한다. 마지막 자리부터 string을 만들었으므로, 마지막에 string을 뒤집으면 원하는 결과가 된다. string NumToString(long num) { string ret = ""; int cnt = 0; while(num > 0) { ret += (num%10).ToString(); ++cnt; if(cnt%3 == 0) ret += ","; num /= 10; } // c# string 뒤집기, 알아두면 좋을 듯. char..

146. LRU Cache

https://leetcode.com/problems/lru-cache  Q. LRU cache를 사용하도록 class를 디자인 하라.  입력은, key, value의 두개의 int type이 들어오며, key가 같으면 overwrite 하고 없으면 add 하라.  Solution.  key를 기준으로 data에 접근해야 하므로, 우선 map 이나 dictionary 타입의 구조가 필요하다. 그리고,  마지막으로 덜 사용한데이터에 바로 접근해야 하므로, list 구조가 필요하다.  c# 에서는 iterator가 없으므로, 아래와 같이 더블 링크드 리스트를 사용해서 데이터에 바로 접근하면 적당하다. public class DoubleListNode { public int val, key; pub..

Shuffle

코드 작성하는 인터뷰에 쉽지만 자주 나는 shuffle 문제를 정리 해 보기로 한다. 방법을 알면 쉽지만, 모르면 까다로울 수 있다. Q. 카드가 n 장 주어진다. 이때 이 카드를 랜덤하게 shuffle해서 반환하라. Solution. random을 활용해야 하는 것은 확실하다. 직관적으로 생각해 보면, 루프를 n 번 돌며 랜덤을 생성하고, 나왔던 수가 나온다면 다시 랜덤 번호 생성을 하면 될 것같다. 이 방법은 최적일 때 O(N)이지만, 최적일 확률은 거의 없다. 따라서 다른 방법을 생각해 본다. 랜덤한 위치의 카드를 하나 고른다. (1 ~ n 까지의 수 중 하나의 random 번호를 생성한다. ) 이 카드를 0번 위치의 카드와 교체한다. 다시 1번부터 랜덤한 위치의 카드를 고른다. 이 카드를 1번 위..