본문 바로가기

분류 전체보기63

백준 1991 트리순회 CPP 1. 문제 https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 2. 풀이 이진트리 -> pair 알파벳을 array에 넣기 위해서 -> ascii 순회 -> 루트를 언제 세는 지, 그리고 중위 순회는 독특하게도 노드를 왼쪽에서 오른쪽으로 세는 순서대로 나온다. 3. 구현 #include using namespace std; pair adj[28]; int vis[28]; void preDfs(int n){ int le = adj[n].f.. 2022. 5. 18.
Q001. 구글 계정을 만들 때, 이미 있는 아이디인지 어떻게 빠르게 알 수 있을까? 노션의 내용을 옮겨오면서 내용이 많이 깨져있습니다. PDF 파일로 보면 더 잘 읽힙니다. 관련 내용은 모두의 연구소 effective python을 진행하면서 정리했던 내용입니다. Q. 구글은 그 엄청나게 많은 유저 아이디 데이터에서 이미 있는 아이디인지 어떻게 그렇게 순식간에 알 수 있는 것일까? A. Probability Data Structure # Probability Data Structure의 정의 Acceptably Inaccurate. Probability Data Structure는 빅데이터 같이 아주 큰 데이터에 대해 정확하지 않지만 수용 가능한 오차 범위 안의 근사값을 알려주는 추정 방법이다. 예를 들면 새로운 구글 계정을 만들 때, 이미 있는 아이디인지 어떻게 빠르게 알 수 있을까?.. 2022. 5. 14.
#013. 백엔드 성장일기: [넥스트 스탭] ENUM과 Null Safety 지난번 글에 이어 계산기 과제를 하면서 공부한 것 중 enum class 와 null safety에 대해 정리해보려고 한다. [ 구현1. enum class ] enum class를 이용해서 operator를 구현해보라는 리뷰를 받고 왼쪽의 코드를 오른쪽과 같이 리팩터링 했다. enum은 단순히 값을 열거하는 존재가 아니라 enum 클래스 안에 프로퍼티나 매서드를 정의할 수 있다. 즉 ADD가 + 라는 연결을 하는 것 이외에 두 값을 받아서 합하는 연산을 할 수 있다. Evaluation 생성자에 입력 받을 연산자(operator)와 anonymous 함수를 정의해서 ADD, SUBSTRATE, MULTIPLE, DIVIDE가 어떤 연산자와 어떤 연산을 할 지 정의할 수 있다. enum클래스도 클래스의 .. 2022. 5. 14.
#012. 백엔드 성장일기: [넥스트 스탭] 코틀린의 특징을 살려 리팩터링 하기 가진 것을 비우기 요구 사항 규모보다 극단적인 리팩터링을 요구하는 경우가 많다. 거부감이 들 수 있지만 일단 적용해 보고, 적용하기 전과 후의 코드를 분석해 본다. 자신이 가진 것을 비울 때 가장 많은 것을 배울 수 있다. 상황에 맞는 설계와 구현 방법을 찾아라 프로그래밍 설계와 구현은 아날로그적인 영역이 많은 부분이다. 프로그래밍을 기술이 아닌 예술의 일부라고 생각하는 이유도 이런 점 때문이다. 프로그래밍 설계와 구현에 정답은 없다. 정답을 찾기보다 요구 사항에 적합한 최선의 설계와 구현 코드를 찾기 위해 노력한다. next step - 과정을 슬기롭게 소화하는 방법 첫번째 과제는 코틀린 코드로 문자열 계산기를 만드는 것이다. 이 글에서는 구체적인 문제 설명과 해결 방법 보다, 코드 리뷰를 두 번 진행.. 2022. 5. 12.
#011. 백엔드 성장일기: PostGreSQL에서 🤦‍♀️의 글자수 확인하기 테이블을 만들면서 varchar(255)를 보고서 이 부분에 대해 조금 더 알아봐야겠다는 생각이 들었다. - 컴퓨터의 기본 저장 단위는 1 byte (8 bit) 이고, 1 bit가 0 또는 1을 나타낼 수 있으므로 1byte는 (2^8 = )256 개를 표현할 수 있다. 이러한 표현 방법을 특정 문자에 연결해 부호화(encoding) 하는 방법으로 ascii(127) - 영어 알파벳과 숫자만, ansi(256, 1byte), unicode(2byte=2^16)이 있다. 유니코드는 U+0000~U+10FFFF 사이의 코드 포인트 (code point)로 구성되어 있다. - varchar는 DB와 charactor set 설정에 따라 기본 값이 달라진다. MySQL 4이하 에서 varchar(N)의 N은 .. 2022. 5. 7.
#010. 백엔드 성장일기: 테이블 스키마 작성하기 어제 향로, 비스타와 로깅 테이블 생성에 관한 밋업을 하면서 내가 작성해간 테이블 스키마를 수정 받을 기회가 있었다. 많은 것을 배우게 되어서 기록하려고 한다. 아래의 테이블 스키마를 이용해 잘못 작성된 테이블 스키마 내용을 수정해보려고 한다. (1) 테이블 네이밍: 테이블이 나타내고자 하는 것을 앞에 쓴다. 위 테이블 예시는 영화의 할인 로그를 기록하는 테이블이다. 그래서 영화 할인을 의미하는 movie_discount라고 썼다. 그런데 이 테이블의 주된 목표는 할인(discount)를 기록하는 것이므로 discount가 앞에 들어가야한다. 따라서 discount_movie 로 작성하는 것이 맞다. 또 discount가 앞에 오면 유저에 대한 할인은 discount_user, 특별 할인은 discoun.. 2022. 5. 3.