| 시간 | 계획 |
|---|---|
| ~ 10 | 출근 |
| 10 ~ 12 | 코딩테스트 연습 |
| 12 ~ 13 | 점심 |
| 13 ~ 14 | 코딩테스트 공부 |
| 14 ~ 16 | 이력서 작성 |
| 16 ~ 18 | 회고 및 벨로그 정리 |
| 18 ~ 19 | 저녁 |
| 19 ~ 23.5 | 개인 공부 |
| 23.5 ~ | 탄력적 퇴근 |
계획을 다 짜고보니 하루가 짧긴하다.
어쩌다보니 게임 프로젝트도 만들게 됐고, 이력서 스터디도 하게 됐다.
그래서 할 것이 무지 많은데
코딩 테스트 문제를 풀고 보니 잠깐이면 다 까먹겠다는 느낌이 들어 기록하려한다.
원래는 백준이나 다른 사이트의 문제를 풀려고 했는데,
동동주의 강한 추천으로 풀기시작했다.
나름의 커리큘럼이 있어서 체계적으로 풀어나갈 수 있는게 장점이다.
영어 문제는 단?점이다.
코치님께서도 쓰시는 플랫폼이라고 하여 사용하게 됐다.
개발자 채용에 특화된 플랫폼이라고 한다.
우리반 사람들이 많이 쓰는 것 같은데, 다양한 곳의 취업을 노려볼 수 있어서 좋아보인다.
Given an array of strings strs, group all anagrams together into sublists. You may return the output in any order.
An anagram is a string that contains the exact same characters as another string, but the order of the characters can be different.
위 문제는 시공간 복잡도를 고려하지 않으면 풀긴 풀 수 있을 것 같지만
시간복잡도 (m*n)에 공간복잡도 (m)으로 풀라길래 최대한 가까운 방법을 찾아보려했다.
여기서 m은 스트링의 수, n은 스트링의 길이이다.
그래서 처음에 고려했던 방법은
각 스트링별로 스트링 내부에서 정렬해서 해당 값을 사용하는 방법이었고
두 번째 고려한 방법은
ascii코드를 사용해서 각 스트링의 아스키 코드합을 딕셔너리 키로 저장을 하고, 리스트를 추출한 뒤에, 리스트 내에서 아나그램이 아닌 것을 다시 찾으려고 했다.
근데
굳이 귀찮게 그런 방법을 사용할 필요가 없었다.
첫 번째, 두 번째 방법을 섞은 방법을 썼다.
스트링 내부에서 정렬한 데이터를 키로(ex. cats => acts), 그리고 값에 리스트 자료 구조를 사용해서 원래 스트링을 (ex. cats) 값으로 넣었다.
마지막에 리스트만 추출하면 된다.
사실 이걸 정리한 이유는
파이썬 코딩할 때 필요한 함수들을 기억하기 위해서이다.
from collections import defaultdict
dic = defaultdict(list)
key = "".join(sorted(item))
list = list(dic.values())
defaultdic은 키가 없을 때 자동으로 추가해주는 딕셔너리
join은 리스트를 하나의 스트링으로 합쳐주는 함수
list(dic.values)는 딕셔너리의 value만 꺼내서 리스트로 만들어주는 함수이다.
오늘은 만능 이력서 틀을 만들어볼 생각이다. 대략 700자 정도 적고, 회사에 따라서 자유롭게 적용할 수 있는 틀을 만들 예정이다.
커피챗을 통해 얻은 조언을 바탕으로 작성할 예정이다.
그래서 개발을 좋아하는 이유, 이직을 하게 된 계기, 정글에서 배우게 된 것을 중심으로 700자를 작성했다.
아마 오늘은 4주차부터 들여다볼 것 같다.
ISA와 명령어/데이터 캐시에 대한 내용을 수정했다.
간만에 보니까 쉽지가 않다.
RISC와 CISC를 봤는데,
RISC는 간단한 ISA라 메모리 접근과 연산이 분리되어 있다.
컴퓨터의 성능이 좋지 않을 때 사용하며 레지스터의 역할이 구체적이고 명확하다.
CISC는 복잡한 ISA로 메모리 접근과 연산이 동시에 이루어진다.
따라서 최적화가 잘 되어있어 메모리 낭비가 없으며 고급 언어와 호환성이 좋다.
명령어/데이터 캐시는 L1 캐시에 존재하는 다른 캐시로
명령어 캐시는 L1 I-Cache에, 데이터 캐시는 L1 D-Cache에 저장된다.
그리고 L2, L3 캐시는 명령어와 데이터를 나누어 저장하지는 않는다.
CPU는 캐시 라인 단위로 가져오므로
명령어는 nop 명령어, 데이터는 패딩 데이터를 통해 캐시 라인을 정렬한다.
말록랩에서 패딩 데이터 정렬을 했던 기억이 새록새록 난다.
그리고 비슷한 맥락으로 핀토스에서 페이지 단위 정렬을 했던 기억도 난다.
가칭 '프로젝트 M'을 조금 건드렸고
이력서 특강을 듣고, 이력서 스터디를 조금했다.
프로젝트 M은 잠깐 쉬기로 하고 이력서와 포트폴리오에 좀 더 집중할 예정이다.
특강을 바탕으로 이력서를 쓰려한다.
아마 오늘/내일은 하루종일 이력서와 포트폴리오를 만드는 데에 집중하지 않을까 한다.