Today Sangmin Learned
[Python] BOJ(백준) 1946번 - 신입사원
CS/알고리즘 2021. 7. 1. 18:17

링크 https://www.acmicpc.net/problem/1946 난이도(solved.ac 참고) 실버1 풀이 이 문제를 처음 보고, 서류심사 성적(첫번째 숫자)을 기준으로 sort한 다음에, 첫 값을 고정으로 두고 더 작은 값을 heap에 넣는 것까지는 바로 생각을 했는데, heap에 넣게 되는 값 기준으로 그 다음 것들과 비교를 해야 되었기 때문에 그렇게 하는 방법에 고민을 좀 했다. 생각해 본 결과, 현재 위치인 now에 처음에는 첫 숫자를 대입하고 더 작은 값을 찾은 경우에 heap에 넣으면서 동시에 now를 그 값으로 대체해 주면 되었다.

article thumbnail
[TypeScript] 점진적 타이핑 1
Web 2021. 6. 30. 21:14

이 글은 인프런의 실전 프로젝트로 배우는 TypeScript 강의를 듣고 정리한 글입니다. function $(selector) { return document.querySelector(selector); } function getUnixTimestamp(date) { return new Date(date).getTime(); } 이 두 자바스크립트 함수를 보자. 기능 자체는 생각하지 말고 코드만 보면, 첫번째 함수의 selector의 타입은 어떻게 될까? 아마 높은 확률로 string일 것이다. 왜냐하면, querySelector 뒤에는 클래스면 ".클래스이름", id면 "#id이름" 이 들어오게 되는데, 어쨌든 간에 id나 클래스의 이름은 문자열로 되어있기 때문이다. 두 번째로 getUnixTimes..

[TypeScript] 자바스크립트에서 타입스크립트로 변환하기
Web 2021. 6. 30. 20:39

이 글은 인프런의 실전 프로젝트로 배우는 TypeScript 강의를 듣고 정리한 글입니다. 1. 자바스크립트 코드에 타입스크립트를 적용할 때 주의해야 될 점 기능적인 변경 하지 않기 테스트 커버리지가 낮을 때는 함부로 타입스크립트 적용하지 않기 처음부터 타입을 엄격하게 적용하지 않기. (점진적으로 strict 하게) 2. 자바스크립트 프로젝트에 타입스크립트를 적용하는 절차 2(1) 타입스크립트 프로젝트 환경 구성 프로젝트 생성 후 npm init -y (npm 초기화 명령어)로 package.json 파일 생성하기 프로젝트 폴더에서 npm i typescript -D 로 타입스크립트 라이브러리 설치하기 타입스크립트 설정 파일 tsconfig.json 을 생성하고 기본값 추가하기 { "compilerOpt..

[Python] BOJ(백준) 1041번 - 주사위
CS/알고리즘 2021. 6. 30. 16:48

링크 https://www.acmicpc.net/problem/1041 난이도(solved.ac 참고) 골드5 풀이 이 문제를 처음 봤을 때는 이게 뭐지? 왜 실버1이지? 걍 브론즈급인데 라고 생각했는데 풀어보니 그게 아니었다. ㅋㅋ 주사위의 최상단 면 + 그 면과 접한 최상위층 면의 합: (최소값) * n^2 + (두번째 작은 값) * 4(n-1) + (세번째 작은 값) * 4 (예를 들면, 3의 경우 최상단 면 9개 + 그 9개와 접해있는 12개의 면) 나머지 면들의 합: ((최소값) * 4(n-1) + (두번째 작은 값) * 4) * (n-1) 이 식 구하는 건 별로 어렵지 않다. 그냥 2 3 4인 경우를 머릿속에 그려보고 하면 금방 나온다. 근데 문제는, 주사위에는 ABCDEF로, A는 F와 마주..

[Python] BOJ(백준) 11000번 - 강의실 배정
CS/알고리즘 2021. 6. 30. 14:51

링크 https://www.acmicpc.net/problem/11000 난이도(solved.ac 참고) 골드5 풀이 회의실 배정과 비슷하지만 좀 다른 문제이다. 회의실 배정은 한 개의 회의실만 있는 상태에서 할 수 있는 회의의 최대값을 구하는 것이었던 반면에, 강의실 배정은 주어진 모든 강의를 할 수 있도록 하는 강의실 수의 최소값을 구하는 문제이다. 후술하겠지만 시간 초과가 떠서 애를 좀 먹었다. 힙을 써야겠다고 생각하여 우선 첫 번째 강의의 종료 시간을 heap에 넣은 다음에 그 값과 다음 강의의 시작 시간을 비교해서 만약 다음 강의의 시작 시간이 더 이르다면, 결국 강의실이 하나가 더 필요하게 된다. 두 번째 강의를 시작하려고 보니 아직 첫 번째 강의가 끝나지 않아서 강의실을 새로 구해야 하기 때..

[Python] BOJ(백준) 1931번 - 회의실 배정
CS/알고리즘 2021. 6. 29. 14:42

링크 https://www.acmicpc.net/problem/1931 난이도(solved.ac 참고) 실버2 풀이 이 문제를 풀면서 lambda를 처음 사용해봤다. 알고리즘 수업을 들으면서 회의실 배정 문제를 이론으로만 접했었는데, 당시에 끝나는 시간이 빠른 순서대로 하는 것이 최적의 결과를 가져온다는 것을 깨닫고 lambda 함수를 이용하여 끝나는 시간인 x[1]을 기준으로 나열했고, 2순위로는 시작 시간인 x[0]을 기준으로 나열했다. 여기서, 왜 2순위로 시작 시간을 뒀는가? - 이부분은 예시로 들어서 설명해야 한다. 2 3 3 1 3 이런 예시가 있다고 하자. 이 경우에 2순위로 시작시간을 나열하지 않는다면 3 3이 먼저 실행이 되고, (3 3)의 뒷자리보다 (1 3)의 앞자리가 더 작기 때문에..

[Python] BOJ(백준) 11047번 - 동전 0
CS/알고리즘 2021. 6. 29. 10:51

링크 https://www.acmicpc.net/problem/11047 난이도(solved.ac 참고) 실버2 풀이 그리디의 대표 문제이다. k에서 i를 나눈 몫을 count에 더해주고, k를 i로 나눈 나머지를 k에 지정한다. 위 예제 입출력을 예시로 들어서 설명해보겠다. 현재 k는 4200원이고, 리스트에는 1원부터 5만원까지의 금액이 있다. 4200원은 5천원~5만원으로 나눴을 때는 몫이 0이다. 천원으로 나눴을 때 비로소 몫이 발생한다. 그래서, i가 1000일 때 k를 i로 나눈 몫을 count로 지정을 해 주는 것이다. 이렇게 되면 count는 천원짜리 네 개가 추가되어 4가 되고, k는 4200 % 1000 = 200원이 된다. 이와 같은 계산을 반복하는 것이다. 4200 -> 200 ->..

[Python] BOJ(백준) 14241번 - 슬라임 합치기
CS/알고리즘 2021. 6. 28. 19:59

링크 https://www.acmicpc.net/problem/14241 난이도(solved.ac 참고) 실버2 풀이 합치는 두 슬라임을 합한 값이 새로운 슬라임이 되고, 전체 점수는 합치는 두 슬라입을 곱한 값이므로 총 점수 값에 (지금 값 * 다음 값)을 넣어준 뒤 두 개를 더한 값을 i번째 인덱스에 두고 i+1번째의 값을 삭제했다. 이렇게 하면 곱한 값은 계속 더해지고, 더한 값은 0번째 인덱스에 계속 업데이트 되면서 그럴 때마다 다음 인덱스가 삭제된다. 결국 while문의 조건에 따라 값이 하나만 남았을 때 종료하고 그 때의 총 점수를 출력함으로써 해결하였다.

article thumbnail
[Python] BOJ(백준) 2217번 - 로프 (+ sys.stdin.readline의 중요성)
CS/알고리즘 2021. 6. 28. 19:27

링크 https://www.acmicpc.net/problem/2217 난이도(solved.ac 참고) 실버3 풀이 문제 풀이 방법은, 그냥 내림차순으로 나열한 다음에 a_list[인덱스] * (인덱스+1)의 최댓값을 구하면 끝난다. a_list[인덱스]는, 예제의 경우 내림차순하면 15 10 이 되는데, 각 로프에 모두 고르게 중량이 걸리게 되므로 15를 선택한다면 15만큼만 들 수 있고, 10을 선택한다면 (10 * 2) = 20만큼 들 수 있다. 이 생각을 토대로, a_list[인덱스]의 값은 작아지고 인덱스는 커지는 상황에서 결국 들 수 있는 값인 a_list[인덱스] * (인덱스 + 1)의 최댓값을 구한 것이다. (여기서 인덱스+1을 해 준 이유는, 인덱스는 0부터 시작하기 때문이다.) 사실 어..

article thumbnail
[TypeScript] 맵드 타입(Mapped Type)
Web 2021. 6. 28. 14:50

이 글은 인프런의 실전 프로젝트로 배우는 TypeScript 강의를 듣고 정리한 글입니다. 맵드 타입은, 쉽게 말하면 자바스크립트의 map함수를 타입에 적용한 것이라고 보면 된다. 즉 기존에 정의되어 있는 타입을 새로운 타입으로 변환해 주는 문법이다. 맵드 타입을 알아보기 전에 자바스크립트의 map 함수가 무엇인지부터 살펴보자. JavaScript - map() API let arr = [{ id: 1, title: '함수' }, { id: 2, title: '변수' }, { id: 3, title: '인자'}]; let result = arr.map(function(item) { return item.title; }); console.log(result); // ['함수', '변수', '인자']; re..