2021-12-07-TIL

Today I Learned

오늘회(오늘식탁) 면접

오늘은 오늘회 서비스를 운영하는 오늘식탁 면접을 보고왔다. 얼마전에 오늘의 집 코딩테스트를 날려서 슬펐는데, 오늘회는 기쁜 마음으로 면접을 보았다. 의외로 기술면접을 바로 진행하지 않고 인사담당자 분과 면접을 진행하였는데, 편안한 분위기 속에서 가벼운 마음으로 면접을 볼 수 있었다. 사실 면접이라기 보다는 수다를 떨고 온 느낌이 크다. 좋은 기업문화를 만들어 나가고자하는 의지가 많이 보였다. 어떤 회사와는 다르게 말이다..

한편, 위워크의 공유오피스를 사용한다는 점도 꽤나 신선한 점이었는데, 여느 회사의 사무실 보다 오히려 깔끔하고 고급져보였다. 건물을 관리하는 시스템이나 시설도 철저한 편이었다. 그래서인지 건물 전체가 깔끔하고, 다들 신경써서 시설을 사용하는 분위기였다.

Power Set (부분집합)

부분집합을 구하는 방법은 크게 두 가지가 있다. 첫 번째는 재귀 호출을 통한 구현이고, 나머지 하나는 비트 마스킹을 통한 구현이다.

재귀 호출을 통한 구현은 조합을 이용하는 구현으로도 가능하고 단순히 방문 배열을 활용하여 재귀호출을 통해서 구현할 수도 있다.

  1. 단순 재귀호출을 통한 구현
/**
* @param arr     부분집합을 구할 대상 집합의 배열
* @param visited 방문여부를 체크할 배열
* @param n       배열의 크기
* @param idx     현재 인덱스
*/
static void powerSet(int[] arr, boolean[] visited, int n, int idx) {
    if (idx == n) {
        print(arr, visited, n);
        return;
    }

    visited[idx] = false;
    powerSet(arr, visited, n, idx + 1);

    visited[idx] = true;
    powerSet(arr, visited, n, idx + 1);
}

  1. 비트마스킹을 통한 구현
/**
* @param arr 부분집합을 구할 대상 집합의 배열
* @param n   배열의 크기
*/
static void bit(int[] arr, int n) {
    for (int i = 0; i < 1 << n; i++) {
        for (int j = 0; j < n; j++) {
            if ((i & 1 << j) != 0)
                System.out.print(arr[j] + " ");
        }
        System.out.println();
    }
}
  • https://bcp0109.tistory.com/15
  • https://bcp0109.tistory.com/17

Counting Sort (계수 정렬)

‘카운팅'이라고 검색을 하려고 하면 자꾸 ‘카운팅 스타'가 뜬다. 쇼미더머니의 영향일까? 아무튼 백준의 수 정렬하기3를 풀면서 계수 정렬의 개념을 정리해보았다. 아니, 정리한 것을 보았다.

  • https://bowbowbow.tistory.com/8
  • https://st-lab.tistory.com/107