프로그래머스 132

[프로그래머스, 파이썬] 모음 사전

풀이 재귀와 백트래킹을 활용한 풀이로 return이 존재하면 입력으로 주어지는 word와 같은 단어이기에 멈추고 아닐 경우 다시 이전의 해당 idx의 값을 빈 문자로 변경 하여 해결 cnt = 0 def solution(word): li = ['']*5 def find(idx): global cnt if "".join(li) == word: return cnt elif idx == 5: return else: for i in ['A','E','I','O','U']: cnt += 1 li[idx] = i if find(idx+1): return cnt li[idx] = '' return find(0)

알고리즘 2024.02.29

[프로그래머스, 파이썬] 최빈값 구하기

풀이 딕셔너리를 활용하여 해결하고자 했으며 return으로는 mx라는 중복된 각 문자의 개수가 있는 dic.values()에서 가장 큰 값이 dic.values()에서 몇 개가 있는지 확인 후 1개가 아닐 경우 -1을 아닐 경우 해당 값이 몇 번째 인덱스에 존재하는지 확인 후 해당 인덱스 값을 dic.key()에서 찾아 return 하여 해결 def solution(array): dic = dict() for i in array: if dic.get(i): dic[i] += 1 else: dic[i] = 1 mx = max(dic.values()) return -1 if list(dic.values()).count(mx) != 1 else list(dic.keys())[list(dic.values())...

알고리즘 2024.02.29

[프로그래머스, 파이썬] 가장 가까운 같은 글자

풀이 딕셔너리를 활용한 풀이로 초기 값으로는 중복을 제거한 s 문자열 요소로 하여 -1로 초기화 이후 해당 값이 -1의 경우 해당 값을 result로 넣어주고 아니면 현재 문자 위치에 해당 값을 뺀 값을 result로 추가 조건식이 끝난 이후 key 값인 현재 문자의 값에 현재 위치를 넣어 해결 def solution(s): result = [] dic = {i:-1 for i in set(s)} for i in range(len(s)): if dic.get(s[i]) != -1: result.append(i-dic[s[i]]) else: result.append(-1) dic[s[i]] = i return result

알고리즘 2024.02.28

[프로그래머스, 파이썬] 피로도

풀이 순열 라이브러리를 사용한 풀이와 dfs을 활용한 풀이 두 가지로 해결 첫 번째 방법은 순열을 사용해서 모든 경우의 수에 대해 확인하고자 했으며 두 번째 방법은 재귀를 활용한 백트래킹을 적용하여 해결 두 방법 모두 코드 자체는 단순하여 설명은 패스. 첫 번째(순열) from itertools import permutations def solution(k, dungeons): result = 0 for i in list(permutations(dungeons,len(dungeons))): pe,cnt = k,0 for dun in i: if pe >= dun[0]: pe -= dun[1] cnt += 1 result = max(result,cnt) return result 두 번째(dfs) result..

알고리즘 2024.02.28

[프로그래머스, 자바] 완주하지 못한 선수

풀이 HashMap을 활용한 풀이 방법으로 hm에 participant의 key가 있다면 값을 1 증가 시키고 없다면 1로 초기화 한 다 completion 의 개수만큼 1 감소 시킨 다음 마지막으로 값이 0이 아닌 경우를 찾아 return하여 해결 import java.util.HashMap; public class 완주하지못한선수 { public static void main(String[] args) { Solution s = new Solution(); String[] participant = {"mislav", "stanko", "mislav", "ana"}; String[] completion = {"stanko", "ana", "mislav"}; System.out.println(s.solu..

알고리즘 2024.02.26

[프로그래머스, 파이썬] 완주하지 못한 선수

풀이 해당 문제는 단순히 집합을 사용해서 해결하려 했지만 예시에 있는 코드를 확인해보니 같은 이름이 여러 개 있는 것으로 확인되어 set() 을 활용한 풀이로는 한계가 있어보여 딕셔너리를 활용하여 해결 def solution(participant, completion): dic = {i:0 for i in set(participant)} for i in participant: dic[i] += 1 for i in completion: dic[i] -= 1 for i in dic.keys(): if dic[i] != 0: return i

알고리즘 2024.02.26

[프로그래머스, 파이썬] 다음에 올 숫자

풀이 두 번째 풀이로 했을 경우 생각했던 대로 잘 해결 될 것이라 생각했지만 제출 후 확인해보니 계속해서 2개의 에러가 발생했기에 첫 번째 풀이로 접근을 해보니 잘 해결되었다. 다만 두 번째 풀이에 대한 테스트케이스가 무엇인지 계속 확인해본 결과 b = c[1]//c[0] 의 값이 0이 되는 경우에 발생하는 0이 분모의 경우에 대한 에러로 두 번째와 같이 작성하게 되면 에러가 발생한다. // 첫 번째 풀이 def solution(c): if c[1]-c[0] == c[2]-c[1]: return c[-1]+c[2]-c[1] else: return c[-1]*(c[2]//c[1]) // 두 번째 풀이 def solution1(c): a,b,state = 0,0,True for i in range(1,3):..

알고리즘 2024.02.26

[프로그래머스, 파이썬] 모의고사

풀이 1,2,3번의 반복 구간을 확인 후, li에 각 반복되는 구간을 넣어줘서 이후 1,2,3번의 반복 구간의 길이보다 answers 길이가 더 길 경우를 위해 j%len(li[i]) 로 반복할 수 있도록 하여 문제 해결 문제 제출 후 cycle이라는 메서드를 알게 되었는데 from itertools import cycle로 배열을 인자로 넣어주고 next() 메서드로 배열을 넣어주게 되면 계속해서 값을 조회하게 되어 해당 방법으로 문제를 푸는 사람도 확인 되었음. def solution(answers): result = [] li = [[1,2,3,4,5],[2,1,2,3,2,4,2,5],[3,3,1,1,2,2,4,4,5,5]] mx = 0 for i in range(len(li)): check = 0..

알고리즘 2024.02.23