목록프로그래머스 (31)
오랑우탄의 반란
오늘도 오랑이는 문제를 풉니다. 둘만의 암호 풀이 과정alphabet 문자열 생성 후 skip에 포함된 문자 제거s 의 문자에 대해 인덱스 + index 에 해당되는 문자 alphabet에서 꺼내서 출력 우선 s 인덱스 카운트가 원활하게 되도록 alphabet 문자열 생성 후 skip 에 포함된 문자를 제거해주는 작업을 해줍니다.def solution(s, skip, index): answer = '' alphabet = 'abcdefghijklmnopqrstuvwxyz' alphabet = ''.join(sorted(set(alphabet) - set(skip))) skip 이 제거된 알파벳을 출력해보면 아래와 같이 나옵니다. 이제 s 인덱스+index 에 맞는 알파벳을 출력해주는..
오늘도 오랑이는 문제를 풉니다. 대충 만든 자판 풀이 과정keymap 글자들의 최소 인덱스+1 목록targets 단어의 각 글자에 대해 위 목록에 있는지 확인있으면 인덱스+1 answer에 append없으면 -1우선 keymap의 인덱스 목록을 저장해줄 딕셔너리를 만듭니다. def solution(keymap, targets): answer = [] key_dict = {} #key_dict에 각 글자별 최소 인덱스값 저장 for i in keymap: for idx, char in enumerate(i): #keymap 단어에서 각 글자의 인덱스와 글자 짝에 대해 if char not in key_dict: key_..
오늘도 오랑이는 문제를 풉니다. 문자열 나누기 풀이 과정s의 각 글자 i iterate 해서 첫 문자 x와 같은지 비교같으면 same +=1다르면 diff +=1same = diff 이면 answer += 1, same&diff 값 초기화, x=i우선 answer, same, diff 를 모두 0으로 설정해두고 시작합니다.처음에는 answer 와 same 을 1로 두고 시작했었는데, 이럴 경우 첫 번째 x에 대해 중복으로 same이 카운트되기 때문에 틀립니다. 또한 반복문 내에서 처음에는 same==diff 조건을 i==x 이후에 뒀는데 이렇게 되면 초기화가 제대로 이루어지지 않기 때문에 순서를 아래와 같이 해야 합니다. for i in s: if same == diff: answer ..
오늘도 오랑이는 문제를 풉니다. 체육복 풀이 과정 여분 체육복 학생이 도난 당하면 빌려줄 수 없음 → reserve 와 lost 의 공통 숫자 제거lost와 reserve 를 비교해서 가장 작은 수부터 제거 (그리디)answer 는 n - lost 개수우선 마지막 제한사항을 보면 여벌 체육복이 있는 학생이 도난당했을 경우, 해당 학생은 다른 학생에게 옷을 빌려줄 수 없게 된다는 조건이 있습니다. 이를 다른 말로 해석해보면, lost 와 reserve 에 같은 숫자가 있을 경우 해당 숫자는 1) 옷을 빌려줄 수 없기 때문에 reserve 에서 제거해야 하고 2) 이미 여분이 있기 때문에 옷을 빌릴 필요가 없어서 lost 에서도 제거해야 합니다. 즉 lost와 reserve 의 교집합을 제거하면 되는데, ..
오늘도 오랑이는 문제를 풉니다. 숫자 짝꿍 풀이 과정 1X 와 Y 의 각 숫자 비교, 일치할 경우 temp 리스트에 넣어주기 각각의 케이스 정의 (-1, 0, 내림차순 정렬 숫자)이때 첫 번째 조건에서 아래와 같은 예시에 있어 5가 3개 들어가는 것을 방지하기 위해 일치할 경우 Y의 숫자를 공백으로 대체해줍니다. 다른 예시로 X = 5525이고 Y = 1255이면 X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다(X에는 5가 3개, Y에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.)def solution(X, Y): answer = '' temp = [] for i in X: if i in ..
오늘도 오랑이는 문제를 풉니다. 옹알이(2) 풀이 과정 1"aya", "ye", "woo", "ma" 4개의 요소 순열 구하기babbling 이 순열과 일치하면 개수 세기 Permutation vs Combination앞서 배웠던 itertools 의 combination 조합과 비슷하지만 조금 다른 permutation 순열을 사용해봤습니다. Permutation (nPr) 순서를 고려한 숫자들의 매칭 예) (1, 2), (1, 3), (2, 3), (3, 2), (3, 1), (2, 1) Combination (nCr)순서를 고려하지 않는, 숫자들의 중복 없는 매칭 예) (1, 2), (1, 3), (2, 3) speak 발음의 모든 순열을 구해야 하기 때문에 for 반복문에 1~5개씩 순열 조..
오늘도 오랑이는 문제를 풉니다. 로또의 최고 순위와 최저 순위 풀이 과정간단한 문제인데요, 조건을 정리하면 아래와 같습니다. lottos와 win_nums 비교일치 번호 개수 = 최저 순위 결정일치 번호 개수 + 0인 개수 = 최고 순위 결정우선 lottos 와 win_nums 를 비교해서 최고/최저 순위가 될 번호의 개수를 각각 세어봅니다. count = 0for i in lottos: for j in win_nums: if i==j: count += 1 # 일치하는 번호 개수count + lottos.count(0) # 일치하는 번호 개수 + 0의 개수 이제 순위만 결정하면 되는데요, 번호 개수가 인덱스가 되도록 리스트를 작성해줍니다. 0, 1 개를 맞췄을 때..
오늘도 오랑이는 문제를 풉니다. 기사단원의 무기 풀이 과정number 까지의 숫자들 각각의 약수의 개수 구하기약수의 개수가 limit 이하인지 확인하기limit을 초과하는 경우 power 로 대체하기최종 숫자들의 합 구하기 우선 약수의 개수부터 구해줍니다. 처음에 count = 0을 첫번째 for 문 밖에 둬서 계속 결과가 틀렸다고 나왔는데, number 이하의 모든 숫자에 대해 count가 리셋되도록 꼭 for문 안에 넣어줘야 합니다. for num in range(1, number+1): count = 0 for i in range(1, int(num**0.5)+1): if num%i==0: if i == (num // i): ..