알고리즘 350

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

풀이 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

[프로그래머스, 파이썬] 둘만의 암호

풀이 ord()와 chr()를 활용해서 각 문자에 접근하여 index만큼 카운팅하되 skip에 포함되는 문자의 경우엔 카운팅하지 않도록 하기 여기서 set()으로 한 이유는 hash로 접근하여 배열처럼 하나씩 접근하지 않기에 더 빠르다고 하여 이렇게 해결 def solution(s, skip, index): result = [] s_skip = set(skip) for i in s: check = 0 i_ord = ord(i) while check != index: n_i_ord = i_ord+1 if 122 >= i_ord+1 else 96+(i_ord+1)%122 if chr(n_i_ord) not in s_skip: check += 1 i_ord = n_i_ord result.append(chr(i..

알고리즘 2024.02.21

[프로그래머스, 파이썬] 주사위 게임 3

풀이 딕셔너리를 활용해서 카운팅을 했는데 차라리 배열로 풀었다면 좀 더 간결한 코드가 될 듯 싶다. 그래서 딕셔너리의 키와 값들만 가지는 배열을 다시 만들어 하나씩 조건문을 활용하여 해결 def solution(a, b, c, d): dic = {} result = 0 for i in [a,b,c,d]: if dic.get(i): dic[i] += 1 else: dic[i] = 1 dic_values = list(dic.values()) dic_keys = list(dic.keys()) if len(dic_values) == 1: result = dic_keys[0]*1111 elif len(dic_values) == 2: if max(dic_values) == 3: p_idx = dic_values.i..

알고리즘 2024.02.21

[프로그래머스, 파이썬] 안전지대

풀이 지뢰가 있는 곳을 찾은 다음 해당 위치에서 board 칸을 벗어나지 않는지 확인 후 해당 칸이 0으로 비어있다면 2로 만들어 위험지역으로 표시한 뒤 다시 반복문을 활용하여 해결 def solution(board): result = 0 hei,wid = len(board),len(board[0]) for i in range(hei): for j in range(wid): if board[i][j] == 1: for a,b in [[-1,0],[-1,1],[0,1],[1,1],[1,0],[1,-1],[0,-1],[-1,-1]]: if 0

알고리즘 2024.02.21

[프로그래머스, 파이썬] 햄버거 만들기

풀이 처음에는 check에 추가하기 전 [1,2,3,1] 각 요소에 하나씩 접근해서 맞는지 확인하는 작업을 해서 풀었더니 시간초과가 발생하여서 stack을 사용해서 마지막 값과 같은지 확인하여 풀었더니 해결 해결코드 def solution(ingredient): result = 0 check = [] for i in ingredient: check.append(i) if check[-4:] == [1,2,3,1]: result += 1 del check[-4:] return result 시간초과 코드 def solution(ingredient): result = 0 while True: cnt = 0 check = [] for i in range(len(ingredient)): if ingredient[..

알고리즘 2024.02.20

[프로그래머스, 파이썬] 바탕화면 정리

풀이 파일이 있는 좌표를 행과 열을 구분하여 추가한 다음 min,max 함수를 사용하여 가장 상단좌측 좌표에서 가장 하단우측 좌표를 찾고 드래그 위치이기에 가장 하단우측 좌표엔 +1을 더하여 해결 def solution(wallpaper): li = [[],[]] for i in range(len(wallpaper)): for j in range(len(wallpaper[i])): if wallpaper[i][j] == "#": li[0].append(i) li[1].append(j) return [min(li[0]),min(li[1]),max(li[0])+1,max(li[1])+1]

알고리즘 2024.02.20