전체 글 109

[Python] 프로그래머스 Lv3. 인사고과

문제https://school.programmers.co.kr/learn/courses/30/lessons/152995 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 요약각 사원은 근무 태도 점수와 동료 평가 점수를 가진다.어떤 사원이 다른 사원보다 두 점수가 모두 낮으면 인센티브 대상에서 제외된다.인센티브를 받을 수 있는 사원들은 두 점수의 합을 기준으로 순위를 정한다.scores[0]에 해당하는 완호가 인센티브를 받을 수 없다면 -1.받을 수 있다면 완호의 석차를 반환하면 된다.풀이모든 사원을 서로 비교하면 시간이 오래 걸리기 때문에 점수를 정렬한 뒤 한 번만 순회한다.먼저 첫 번째 점수는 내림차순, ..

[Python] 프로그래머스 Lv2. 광물 캐기

문제https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 요약다이아몬드, 철, 돌 곡괭이를 이용해서 주어진 순서대로 광물을 캐는 문제.곡괭이 하나로 최대 5개의 광물을 캘 수 있고, 사용하는 곡괭이와 광물의 종류에 따라 피로도가 다르게 소모된다.가지고 있는 곡괭이를 적절하게 사용해서 최소 피로도를 구하면 된다.풀이곡괭이 하나당 광물을 5개씩 캘 수 있기 때문에 광물을 5개 단위로 묶어서 생각하면 된다.먼저 가지고 있는 곡괭이로 캘 수 있는 광물까지만 잘라준다.max_minerals = sum(pick..

[Python] 프로그래머스 Lv2. 무인도 여행

문제https://school.programmers.co.kr/learn/courses/30/lessons/154540 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 요약x 또는 1~9 사이의 자연수가 칸마다 들어오는데, 숫자가 있는 칸이 연결될때는 하나의 무인도로 치고 각 칸에 있는 숫자를 식량의 양이라고 할때 오름차순으로 식량 개수를 출력하는 문제.이때 x는 바다.풀이bfs를 이용해서 dx, dy로 방문하지 않았던 본인 근처를 계속 연결하고 식량의 개수를 더해가면 되는 문제다.이때 중요한 부분은 숫자를 찾는 걸 먼저하고 이후에 좌우위아래를 다 확인하는 방식으로 진행하면 된다!from collections..

[Python] 프로그래머스 Lv3. 기지국 설치

문제https://school.programmers.co.kr/learn/courses/30/lessons/12979 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 요약일렬로 있는 아파트에 기존 기지국들이 설치되어 있고, 각 기지국은 양쪽으로 w만큼 전파를 전달할 수 있다.전파가 닿지 않는 모든 아파트에 전파가 전달되도록 최소한의 기지국을 추가로 설치하면 되는 문제다.풀이기지국 하나가 커버할 수 있는 범위는 2 * w + 1이다. 기존 기지국을 순서대로 확인하면서 전파가 닿지 않는 구간의 길이를 구하고, 해당 구간에 필요한 기지국의 개수를 계산하면 된다. 구간의 길이가 gap, 기지국 하나의 범위가 cove..

[Python] 프로그래머스 Lv2. 이진변환 반복하기

문제https://school.programmers.co.kr/learn/courses/30/lessons/70129 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 요약x의 모든 0을 제거하고 그 길이를 c라고 한다면, c를 2진법으로 표현한다.이게 이진 변환이라고 한다면, 주어진 s를 가지고 1이 될때까지 위 방식을 반복한다. 풀이이진 변환 방식을 코드로 나타내고 1이 될때까지 반복되도록 while문을 작성하면 금방 푸는 문제였다. bin() 함수를 활용해서 쉽게 이진수로 나타내면 더 빠르게 풀 수 있다.def solution(s): cnt = 0 zero = 0 while s != '1'..

[Python] 프로그래머스 Lv2. JadenCase 문자열 만들기

문제https://school.programmers.co.kr/learn/courses/30/lessons/12951 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 요약문자열이 주어졌을때, 맨앞에 있는 알파벳만 대문자. 나머지는 소문자로 만들면 되는 문제였다.풀이공백을 기준으로 대문자 구간이 생겨나는 거기 때문에 split, upper, lower를 활용하면 금방 풀 수 있는 문제였다.def solution(s): words = s.split(' ') answer = [] for word in words: if word: word = word[0].upper(..

[Python] 프로그래머스 Lv3. 자물쇠와 열쇠

문제https://school.programmers.co.kr/learn/courses/30/lessons/60059 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 요약key와 lock이 2차원 배열로 주어진다.각 값은0 : 홈1 : 돌기를 의미한다. 열쇠는 90도씩 회전할 수 있고, 자물쇠 위에서 자유롭게 이동할 수 있다.열쇠의 돌기와 자물쇠의 홈이 정확하게 맞아야 하고, 열쇠의 돌기끼리 겹치면 안 된다.즉, 열쇠를 이동하거나 회전했을 때 자물쇠 영역이 전부 1이 되면 True를 return하면 된다.풀이key를 lock 위에서 어떻게 움직여야 하나 싶었는데, 그냥 자물쇠 주변에 여유 공간을 만들어서 큰 ..

[Python] 프로그래머스 Lv3. 가장 긴 팰린드롬

문제https://school.programmers.co.kr/learn/courses/30/lessons/12904 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 요약문자열 "s"가 주어졌을 때, 문자열의 부분문자열 중에서 앞에서 읽으나 뒤에서 읽으나 똑같은 팰린드롬을 찾는다.그중 가장 긴 팰린드롬의 길이를 return하면 된다.풀이처음에는 부분문자열을 하나씩 잘라서 뒤집은 값이 같은지 확인해야 하나...? 생각했는데 그러면 경우의 수가 너무 많아진다.결국 팰린드롬은 가운데를 기준으로 양쪽 문자가 같은지 확인하면서 늘려가면 된다.예를 들어"abcba"라면 가운데에 있는 "c"를 기준으로"b == b""a ..

[Python] 프로그래머스 Lv3. 숫자 게임

문제https://school.programmers.co.kr/learn/courses/30/lessons/12987 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 요약A, B 두 배열이 주어진다.이때 배열에 들어간 값들은 해당 사원들(index)이 가지고 있는 숫자의 값이다. 1대1로 숫자 게임을 진행할 건데, 이때 상대보다 큰 값을 갖고 있다면 이기는 게임 규칙이다. (같으면 무승부다.)B팀이 최고로 많이 이길 수 있는 경우의 수를 구하라.풀이문제에서는 A팀의 순서가 고정된 것처럼 말하는데, 사실상 그냥 정렬해버리고 비교해버리면 되는 문제였다. 왜냐하면... 그걸 맞춰서 하든 다 정렬해버리고 하든 어차피..

[Python] 프로그래머스 Lv2. 최솟값 만들기

문제https://school.programmers.co.kr/learn/courses/30/lessons/12941 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 요약배열 A, B가 주어지고 해당 배열에서 하나씩 꺼내서 곱한 값의 합 중 가장 작은 값을 구하면 되는 문제.풀이이 문제도 쉽다. 그냥 가장 큰값이랑 가장 작은 값을 곱했을때가 다 더했을때 가장 작아지는 경우이기 때문에, A랑 B를 각각 반대로 정렬한다음에 맨 뒤에서부터 곱하고 result에 더해준 다음에 pop을 했다. def solution(A,B): n = len(A) result = 0 A.sort() B.sort(r..