파이썬 알고리즘 : 피보나치 수 2, 01타일, 동전

2023년 9월 7일 알고리즘 문제풀이 문제 1 백준 2748 문제 링크 1차 시도 나의 생각 기본적인 다이나믹 프로그래밍 문제였다. 재귀를 이용하면 시간초과가 되니 정의한 함수를 저장하는 배열을 만들어서 이를 참조하자. 결과 정답 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import sys n = int(sys.stdin.readline()) dp = [0 for _ in range(n+1)] dp[1] = 1 def fibo(x): if x == 0: return dp[0] elif x == 1: return dp[1] else: if dp[x]: return dp[x] else: dp[x] = fibo(x-1) + fibo(x-2) return dp[x] print(fibo(n)) 문제 2 백준 1904 문제 링크 ...

2023년 9월 7일 · 3 분 · 배준수

동시성(3)

책너두 5기 27일차 로버트 C. 마틴의 클린코드 p. 237~ p.244 내용정리 13.동시성 스레드 코드 테스트하기 지금까지 공부한 것은 스레드가 하나인 프로그램은 지금까지 한 말이 모두 옳다. 하지만 같은 코드와 같은 자원을 사용하는 스레드가 둘 이상으로 늘어나면 다르다. 권장사항: 문제를 노출하는 테스트 케이스를 작성하라. 프로그램 설정과 시스템 설정과 부하를 바꿔가며 자주 돌려라. 실패하면 원인을 추적하라. 스레드가 둘 이상일 때 지침은 다음과 같다. 말이 안 되는 실패는 잠정적인 스레드 문제로 취급하라. 다중 스레드를 고려하지 않은 순차 코드부터 제대로 돌게 만들자. 다중 스레드를 쓰는 코드 부분을 다양한 환경에 쉽게 끼워 넣을 수 있도록 스레드 코드를 구현하라. 다중 스레드를 쓰는 코드 부분을 상황에 맞춰 조정할 수 있게 작성하라. 프로세서 수보다 많은 스레드를 돌려보라. 다른 플랫폼에서 돌려보라. 코드에 보조 코드(instrument)를 넣어 돌려라. 강제로 실패를 일으키게 해보라. 말이 안되는 실패는 잠정적인 스레드 문제로 취급하라 다중 스레드 코드는 아주 드물게 한번씩 나타나서 실패를 재현하기 아주 어렵고 그로 인해 일회성 문제로 치부한다. 그렇게 되면 잘못된 코드위에 코드가 계속 쌓인다. ...

2023년 9월 6일 · 3 분 · 배준수

서버 시작하기

책너두 6기 3일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.25 ~ p.35 3일차 2. 설치와 설정 2.2 MySQL 서버의 시작과 종료 MySQL 서버가 설치되면 /etc/my.cnf 설정 파일이 준비되는데, 아주 기본적인 설정만 기록되어 있다. 테스트 용으론 충분하다. 나는 window라 이 챕터는 스킵.. MySQL 서버 업그레이드 서버 업그레이드 방법은 두가지 방법이 있다 MySQL 서버의 데이터 파일을 그대로 두고 업그레이드 => 인플레이스 업그레이드(In-Place Upgrade) mysqldump도구등을 이용해 데이터를 SQL 문장이나 텍스트 파일로 덤프한 후 새로 업그레이드 된 서버에서 덤프된 데이터를 적재 => 논리적 업그레이드(Logical Upgrade) 읽고 나서 아직까진 특별한 사항이 없다.. ...

2023년 9월 6일 · 1 분 · 배준수

특별한 상황에서의 면접

3일차 게일 라크만 맥도웰의 코딩 인터뷰 완전 분석 p.21 ~ p. 38 내용 정리 3. 특별한 상황에서의 면접 경력자 시스템 디자인 혹은 설계와 관련된 문제, 이력서에 관련된 질문은 중요하게 다뤄진다. 또한 경험을 내세울만한 질문도 충분히 만족스러운 답변을 해야 한다. 테스터 혹은 SDET SDET(Software Design Engineers in Test)는 테스트를 위한 코드를 작성한다. 따라서 코딩과 테스트 둘 다 잘해야 한다. 다음 절차를 추천한다. 테스트에 관련된 핵심적 질문 대비 : 펜을 어떻게 테스트할것인가? 코딩 관련 질문 대비 : 일반적인 개발자보단 덜하더라도 코딩 준비해야한다. 코딩 결과를 테스트 하는 훈련 : 테스트 해볼 줄 알아야 한다. 바람직한 경력을 위한 조언 입사를 위한 전략으로 SDET를 고르는 것은 좋지 않다. 개발직 전환이 매우 힘들기 때문이다. ...

2023년 9월 6일 · 2 분 · 배준수

5. 확률적 분석과 랜덤화된 알고리즘

5. 확률적 분석과 랜덤화된 알고리즘 5.1 고용 문제 직업 소개소에서 면접자를 추천 받으려면 적은 소개료를 지불해야 한다. 소개받아 면담한 후 일을 잘할 수 있는 사람이면 해고하고 새로운 지원자를 고용하면 된다. 고용하면 많은 소개료를 지불해야 한다. 이 떄 비용을 알고자 한다. Hire-ASSISTANT(n) 1 2 3 4 5 6 best = 0 // 0번은 가장 낮은 점수를 갖는 가상의 지원자 for i = 1 to n 지원자 i를 면접한다. if 지원자 i가 지원자 best보다 나은가? best = i 지원자 i를 고용한다. 위 의사코드가 비용을 의미한다. ...

2023년 9월 5일 · 3 분 · 배준수

동시성(2)

책너두 5기 26일차 로버트 C. 마틴의 클린코드 p. 230~ p.237 내용정리 13.동시성 난관 동시성을 구현하기 어려운 이유? 예시 1 2 3 4 5 6 7 public class X { private int lastIdUsed; public int getNextId() { return ++lastIdUsed; } } 인스턴스 X를 생성하고, lastIdUsed 필드를 42로 설정한 다음, 두 스레드가 해당 인스턴스를 공유한다. 두 스레드가 getNextId();를 호출한다고 가정헀을때 결과는? ...

2023년 9월 5일 · 4 분 · 배준수

면접 과정

2일차 게일 라크만 맥도웰의 코딩 인터뷰 완전 분석 p.1 ~ p. 20 내용 정리 1. 면접 과정 면접에서 알고리즘과 코딩은 아주 큰 부분을 차지한다. 면접관은 우리가 지금껏 보지 못했던 알고리즘 문제를 풀어내는 능력을 평가하고 싶어 한다. 면접은 다음을 통해 평가된다. 분석 능력 : 문제를 푸는 데 받은 도움, 최적화 정도, 소요 시간, 설계시 고려한 다양한 방법 코딩 능력 : 알고리즘을 적절한 코드로 표현, 깔끔한 구성, 에러 대비, 스타일 기술적 지식 및 컴퓨터 과학 기본 : 컴퓨터 과학에 대한 기본기 경험 : 기술적 결정, 프로젝트에 대한 경험, 진취성과 결단성 등 문화 / 의사 소통 능력 : 지원자의 성격과 회사의 가치, 면접관과 의사소통 회사마다 다른 비중을 가진다. 일반적인 알고리즘 문제 풀이는 위 3가지가 중요하다. ...

2023년 9월 5일 · 3 분 · 배준수

소개 DBMS 선택하기

책너두 6기 2일차 백은빈, 이성욱의 Real MySQL8.0 1권 p.1 ~ p.24 2일차 01 소개 DBMS 선택의 기준 : 자기가 가장 잘 활용 할 수 있는 DBMS여야 하지만, 안정성 성능과 기능 커뮤니티나 인지도 순서로 고려할 수 있다. 02 설치와 설정 2.1 MySQL 서버 설치 설치 부분은 이미 이전에 다른 블로그를 보고 설치했기 때문에 넘어갔다. 2.2 MySQL 서버의 시작과 종료 윈도우는 MySQL Workbench라는 GUI를 통해 쉽게 제어할 수 있다. 책의 내용은 리눅스 운영체제의 내용을 다루고 있어 넘어갔다. ...

2023년 9월 5일 · 2 분 · 배준수

MySQL 공부 시작

책너두 6기 1일차 책 : Real MySQL 1권 주제 MySQL에 관한 모든 것. 독서 방법 읽고 ‘그렇구나’가 아니라, 적용해보고 따라해보고 손으로 익히자. 책너두에 임하는 다짐 그동안 내가 사용한 데이터베이스는 MongoDB 뿐이었다. 취준을 하다보면 느끼겠지만 SQL 관련하여 코딩테스트를 진행하기도 하고, 기술스택으로도 많이 요구한다. 진작에 공부했어야 했지만 미루다가 책너두를 통해 할 수 있는 원동력을 얻었다. 꼭 완주하자.

2023년 9월 4일 · 1 분 · 배준수

동시성(1)

책너두 5기 25일차 로버트 C. 마틴의 클린코드 p. 226~ p.229 내용 정리 13. 동시성 동시성과 깔끔한 코드는 양립하기 어렵다. 동시성이 필요한 이유? 동시성은 결합(coupling)을 없애는 전략이다. **무엇(what)**과 **언제(when)**을 분리하는 전략이다. 스레드가 하나인 프로그램은 무엇과 언제가 밀접하다. **무엇(what)**과 **언제(when)**를 분리하면 애플리케이션 구조와 효율이 극적으로 나아진다. 따라서 시스템을 이해하기 쉽고 문제를 분리하기도 쉽다. 예시: 서블릿(Servlet) 서블릿은 웹 혹은 EJB 컨테이너 아래서 돌아가는데 컨테이너는 동시성을 부분적으로 관리한다. 웹 요청이 들어올 때마다 웹 서버는 비동기식으로 서블릿을 실행한다. 원칙적으로 각 서블릿 스레드는 다른 서블릿 스레드와 무관하게 자신만의 세상에서 돌아간다. 서블릿 프로그래머는 동시성을 정확히 구현하도록 각별한 주의와 노력을 기울여야 한다. 그럼에도 서블릿 모델이 제공하는 구조적 이점은 아주 크다. ...

2023년 9월 4일 · 2 분 · 배준수