알고리즘 315

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

풀이 딕셔너리를 활용한 풀이로 초기 값으로는 중복을 제거한 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

[프로그래머스, 파이썬] OX퀴즈

풀이 첫 번째 풀이의 경우엔 quiz로 받은 배열의 값을 replace() 메서드로 =의 경우 빈 문자로 변경 후 split() 메서드로 없애서 숫자와 연산자만 남게 한 뒤 해결했으며 두 번째 풀이의 경우엔 eval() 메서드를 활용하여 replace() 메서드로 =의 경우 == 으로 변경 후 해당 문자열을 그대로 실행 후 맞는지 아닌지 확인하여 해결 다만 eval() 의 경우 보안에 아주 취약하여 알고리즘 테스트나 간단 확인용으로 사용하면 좋을 듯 하다. 이유는 eval() 로 받아온 값이 악성 웹 사이트 방문 또는 내부 프로그램을 건드릴 수 있기 때문. 첫 번째 풀이 def solution(quiz): result = [] for i in quiz: li = i.replace("=","").split..

알고리즘 2024.02.23

[프로그래머스, 파이썬] 분수의 덧셈

풀이 해당 문제는 분모의 값을 최소 공배수로 맞춰야 하는 문제로 최소 공배수를 찾기 위해선 최대 공약수가 필요하기에 따로 만든 최대 공약수, 최소 공배수를 만들어 사용 이후 기약 분수로 만들어야 하기에 한 번 더 GCD 값인 x로 나눈 몫을 출력하여 해결. def solution(numer1, denom1, numer2, denom2): def LCM(a,b,gcd): return b//gcd*a def GCD(a,b): while a != 0: a,b = b%a,a return b lcm = LCM(denom1,denom2, GCD(denom1,denom2)) a = lcm//denom1*numer1+lcm//denom2*numer2 x = GCD(a,lcm) return [a//x,lcm//x]

알고리즘 2024.02.22