목록프로그래머스/1단계 (30)
연습장
goal 에 있는 원소인덱스로 번호를 매긴다면 예제1. cards1 = [0,3,4] cards2 = [1,2] 예제2. cards1 = [0,4,3] cards2 = [1,2] 예제 2의 cards 의 순서가 0 -> 4 -> 3 으로 진행되므로 No 가 된다. 1. goal 의 원소를 빼서 각 cards 를 숫자(goal 의 인덱스)로 바꾼 후 2. cards 의 숫자가 오름차순으로 진행되는지 확인한다 1의 경우 list.index('해당문자') 로 확인 할 수 있다. def solution(cards1, cards2, goal): answer = '' for word1 in cards1: print(goal.index(word1)) return answer 다음과 같이 card1 의 원소가 goal..
participant 에는 있고 completion 에 없는 사람을 1명 찾으면 된다. 간단하게 participant 에서 completion 을 빼면 되지않나 라고 생각했다. 빼기가 없어서 for 문으로 반복하여 진행해봤다. 중복 이름도 있으므로 participant 에서 원소를 하나씩 빼서 completion 에 존재하면 지우고 존재하지 않으면 return 하도록 하였는데 def solution(participant, completion): participant.sort() completion.sort() for part in participant: if part in completion: completion.remove(part) else: return part 시간 초과 부분에서 문제가 발생했다...
프로그래머스를 풀다보면 종종 글을 이해를 잘 못하는 기분이 들곤한다. 첫 문자와 나머지 문자의 횟수를 샌다. 두 횟수가 같아지면 하나의 단어로 끊는다. 3번의 예시를 보면 a a a b b a c c a 1 2 3 3 3 4 4 4 나머지 0 0 0 1 2 2 3 4 4,4 로 같아져서 aaabbacc 의 한 단어로 마무리 된다. c c a b c 1 2 2 2 나머지 0 0 1 2 2,2 로 같아져서 ccab 로 한 단어가 되고 b a b 1 1 나머지 0 1 1,1 로 같아져서 ba 로 한 단어가 된다. 총 3단어로 result = 3 이된다. 1. 첫 글자가 어떤건지 저장 2. 다음 글자가 처음과 같은지에 따라서 각각 카운트 3. 같아지면 단어로 처리 def solution(s): answer = ..
n - 전체 학생수 lost - 체육복이 없다. reserve - 체육복이 여벌이 있다. return - 체육 수업을 듣는 학생 수 특이한 점으론 lost 와 reserve 가 같게 되면 빌리거나 빌려줄 수 없다는 점이다. 즉 lost 와 reserve 의 원소가 겹치면 양쪽 배열에서 지워버리는게 좋은 해결 방법이 될 걸로 예상 1. lost 와 reserve 에 중복되는 원소 확인 및 처리 2. lost 에서 1을 빼거나 1을 더했을때 reserve 에 해당 숫자가 있어야 빌릴 수 있음 3. 빌리고 나서는 더 빌리면안됨. [3] 이 [2,4] 에게 각각 빌리면 2번 빌리는 경우가 나올 수 있음. def solution(n, lost, reserve): answer = 0 num = 0 # 체육복을 빌린..
문제 해석 X, Y 두 수가 있는데 겹치는 숫자를 뽑아서 그걸로 가장 큰수를 만드는 문제라고 볼 수 있다. 12321 -> 1, 2, 3, 2, 1 42531 -> 4, 2, 5, 3, 1 각각 1,2,3 이 겹치며 321 로 배치하면 가장 큰 수가된다. 풀이 방법 1. 숫자를 분해 2. 겹치는 숫자를 추출 3. 크게 만들기 (역으로 정렬 , 내림차순으로 정렬) 라고 생각했는데 제한 사항을 보니 굉장히 긴 수가 나올 것으로 예상된다. 만약 위의 로직대로 for 문을 이용하면 시간 초과가 날것으로 예상된다. -> 배열로 풀어야되나 -> 딕셔너리로 만들어서 {'1' : a개, '2': b개 ... } 로 풀어야될까 1. 각각을 딕셔너리로 만든다. 2. 각 key 에 따라 value 값이 겹치는 정도를 본다...
문제 해석 기존의 로또와 다르지만 아무튼 문제를 풀어보자면 lottos : 구입한 로또 번호 win_nums : 당첨된 로또 번호 0 -> 알수 없는 숫자 0 이 아닌 숫자에 대해서는 고정된 값이며 0 에는 어떤 숫자든지 들어갈수 있고 이를 이용하여 최고 순위, 최저 순위를 예상해보자는 문제이다. 풀이 방법 1. 0 의 갯수를 확인한다. 2. 0을 뺀 나머지 숫자중에서 몇개가 일치하는지 확인한다. 3. 최고와 최저에 대해서 계산해본다. 순위를 매기는 방법을 보니까 6개가 일치하면 1등 5개가 일치하면 2등 만약 7에서 일치할때마다 1씩 뺸다면 다음과 같이 순위를 매길 수 있으며 확정된 숫자에 대해서 먼저 순위를 매기고 나머지 0의 갯수만큼 예상 순위 처리를 해주면 된다. + 전부다 틀릴경우 7위가 되게 ..
문제 해석 babbling 의 원소를 "aya", "ye", "woo", "ma" 를 활용하여서 만들 수 있는지? 단 연속해서 사용하면 안된다. ayaye = aya + ye -> o uuu = x yeye = ye + ye -> 연속 -> x yemawoo = ye + ma + woo -> o ayaayaa = aya + aya + a -> x 풀이방법 1. babbling 의 원소를 하나씩 가져온다 2. 원소가 "aya", "ye", "woo", "ma" 를 이용하여 만들 수 있는지 확인한다. def solution(babbling): answer = 0 # 1. 하나씩 꺼내온다 for word in babbling: # 2. replace 를 통해 변환하여 확인한다. word = word.repla..
문제 해석 [1번기사, 2번기사, 3번기사, 4번기사, 5번기사] 각각에 대해 약수의 값은 고정이다. -> [1 , [1,2] , [1,3] , [1,2,4], [1,5] ] 그 약수의 갯수를 다음과 같이 나타내며 -> [1, 2, 2, 3, 2] 이때 limit 의 값이 원소의 값보다 클 경우 -> 원소의 값을 power 로 대체한다. 예2 를 통해 다시 이해해보자면 각각의 약수는 다음과 같고 [1, [1,2], [1,3], [1,2,4], [1,5], [1,2,3,6], [1,7], [1,2,4,8], [1,3,9], [1,2,5,10] ] 갯수는 다음과 같으며 -> [1, 2, 2, 3, 2, 4, 2, 4, 3, 4] limit 가 3 이므로 3보다 큰 원소에 대해서 power 값인 2로 대체한다..
문제 해석 1. nums 의 길이의 절반만큼 선택을 할 수 있다. 2. 최대한 원소를 다양하게 뽑았을때의 값이 result 풀이 방법. 1. 몇개를 뽑아야하는지? ( N 개) 2. 중복을 제거한 nums 의 새로운 배열의 길이가 (L 일때) 2-1. 길이가 갯수보다 클 경우 -> N 2-2. 길이가 갯수보다 작을 경우 -> L def solution(nums): # 1. 갯수 N = len(nums)/2 # 2. 중복제거 unq_nums = set(nums) L = len(unq_nums) # 2-1, 2-2 비교 if L >= N : return N else: return L
Q. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다. "지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다. 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다. arr 로 받은 숫자를 2진수로 바꾼다. 각각의 숫자를 더해 0이면 빈칸-> ' ' 1이상이면 벽 -> '#' 이 된다. ex) 20 , 1 ..