전체 글 78

[프로그래머스] 예산 (level 3) - 이분탐색/이진탐색 (python)

1. 문제 설명 국가의 역할 중 하나는 여러 지방의 예산요청을 심사하여 국가의 예산을 분배하는 것입니다. 국가예산의 총액은 미리 정해져 있어서 모든 예산요청을 배정해 주기는 어려울 수도 있습니다. 그래서 정해진 총액 이하에서 가능한 한 최대의 총 예산을 다음과 같은 방법으로 배정합니다. 1. 모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정합니다. 2. 모든 요청이 배정될 수 없는 경우에는 특정한 정수 상한액을 계산하여 그 이상인 예산요청에는 모두 상한액을 배정합니다. 상한액 이하의 예산요청에 대해서는 요청한 금액을 그대로 배정합니다. 예를 들어, 전체 국가예산이 485이고 4개 지방의 예산요청이 각각 120, 110, 140, 150일 때, 상한액을 127로 잡으면 위의 요청들에 대해서 ..

Problem Solving 2020.05.21

(1) git 시작하기

0. git이란? 프로젝트를 할 때, 여러 사람이 같은 파일을 수정할 일이 있을 것이다. 만약, 저장소에 Hi 라고 쓰인 문서가 있고 a와 b가 해당 파일을 수정하기 위해 원본을 다운받았다고 가정하자. a는 Hi everyone이라고 수정하여 저장소에 올리고, b는 Bye 라고 수정해서 저장소에 올렸다. 그렇게 되면 a가 수정한 부분은 날라가게 되고 b가 수정한 부분만 저장소에 남게 된다. git을 이용하면 이러한 문제를 방지할 수 있다. git이란, 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. git의 특징을 정리하면 다음과 같다. 소스코드를 주고받을 필요가 없고, 같은 파일을 여러 명이 동시에 작업하는 등 병렬 개발이 가능..

github 2020.05.19

[프로그래머스] 네트워크 - DFS (깊이우선탐색) (python)

1. 문제 설명 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 2. 제한사항 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다. 각 컴퓨터는 0부터 n-1인 정수로 표현합니다. i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 comp..

Problem Solving 2020.05.17

[프로그래머스] 큰 수 만들기 - 그리디 greedy | 스택 Stack (python) (2)

5. 두번째 풀이 스택을 이용하여 풀이가 가능하다. for문을 이용하여 스택에 숫자들을 넣으며 다음 조건들을 만족시켜주면 된다. 숫자를 넣었을 때 직전에 넣은 숫자가 더 작은 경우 자리를 바꾼다. 가장 위에 있는 숫자를 pop한다. 매 단계마다 1-2를 반복한다. 빼낸 숫자가 k와 같아지면 num의 나머지 숫자들을 stack에 추가해주고 끝낸다. def solution(number, k): num = list(number) stack = [num[0]] count = 0 for i in range(1, len(num)): if count == k: stack = stack + num[i:] break stack.append(num[i]) if stack[-1] > stack[-2]: while(len(s..

Problem Solving 2020.05.16

[프로그래머스] 큰 수 만들기 - 그리디 greedy | 스택 Stack (python) (1)

1. 문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 2. 제한 조건 number는 1자리 이상, 1,000,000자리 이하인 숫자입니다. k는 1 이상 number의 자릿수 미만인 자연수입니다. 3. 입출력 예 number k return "1924..

Problem Solving 2020.05.16

[프로그래머스] 체육복 - 그리디 greedy (python)

1. 문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution ..

Problem Solving 2020.05.15

[프로그래머스] 완주하지 못한 선수 - 해시 (python)

1. 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 2. 제한 사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 3. 입출력 예 participant completion return [l..

Problem Solving 2020.05.14

2020-05-13 블로그 소개이자 포부

#1 블로그를 만든 이유 어제 대학다니던 시절 같은과 선배를 만나고왔다. 나름 복수전공 비슷하게 하면서 수업도 같이듣고 했는데 공부를 매우 잘하시는 분이고 그때부터 느꼈지만 그냥 천재... 얼마전에 취업을 해서 지금은 개발자로(듣자마자 엄청 좋아함^^) 일하고 계신데 취업할때 준비할걸 이것저것 얘기해주셨다. 깃허브나 코딩테스트나 모두 중요하고 그걸 잘 정리해서 포트폴리오로 기록을 해놓으라고 하셨다. 안그래도 예전부터 내가 공부하는게 너무 난잡하고 여러개를 쑤시고 다녀서 한번 정리해야겠다고 생각은 했었다. 근데 실천하는게 너무 어려벙; 결론은 내가 공부하는거 정리 + 취업할때 쓸 용으로 블로그 하나 팠다. 책이나 다른 블로그 보고 공부하고 프로젝트 하면서 업로드 할 예정. 민망하니까 주변사람들 한테는 공부..

잡담 2020.05.13