본문 바로가기

알고리즘 문제풀이79

[프로그래머스] 코딩테스트 입문 문제 풀이 [내 풀이] - 문자열 수식이라서 eval() 함수를 사용하려고 했다. def solution(quiz): return ["O" if eval(q.replace('=', '==')) else "X" for q in quiz] [참고 풀이] - 코드 길이는 좀 더 길지만 훨씬 가독성이 좋다고 느껴졌다. - 이 코드의 댓글에 eval() 함수는 현업에서 사용하면 안 된다는 이야기가 있었다. 보안 때문이라고 하던데... 다음에 찾아봐야겠다. 잘 정리되어 있던 글이 있어서 링크 첨부: (https://velog.io/@kylee31/eval) def valid(equation): equation = equation.replace('=', '==') return eval(equation) def solution(.. 2023. 5. 21.
[프로그래머스] 코딩테스트 입문 문제 풀이 def solution(n): answer = 0 for _ in range(n): answer += 1 while answer % 3 == 0 or '3' in str(answer): answer += 1 return answer [내 풀이] - 최대 공약수 구하는 함수 math.gcd(a,b) 활용하지 못해서 추가 함수를 구현해야 했던 점이 아쉽다. - 분자, 분모를 기약분수로 만들지 못해서 불필요한 처리가 생겼다. #약수 구하는 함수? def soinsu(x): i = 2 res = [] while i 2023. 5. 19.
[프로그래머스] 코딩테스트 입문 문제 풀이 def solution(i, j, k): totalCount = 0 for x in range(i, j+1): totalCount += str(x).count(str(k)) return totalCount# 다른 사람 풀이 장점: 1) for문 안에서 어차피 한 줄일 거라면, 리스트 컴프리헨션을 이용하면 앞에 한 줄로 표현 가능(str(i).count(str(k)) 이 부분) 2) 리스트에 담기 때문에 sum( ) 함수 사용 가능 def solution(i, j, k): answer = sum([ str(i).count(str(k)) for i in range(i,j+1)]) return answer [내 풀이] - 너무 복잡해져 버렸다. def solution(emergency): #인덱스가 필요하니까.. 2023. 5. 16.
[Python] 요약 정리 ✅ 출력형식 %(a, b, c) 와 같이 표현하는 것 기억! a, b = map(int, input().strip().split(' ')) print("%d + %d = %d" %(a, b, a+b)) ✅ '구분자'.join(리스트) 리스트의 구성 원소들을 구분자를 이용하여 열거해서 하나의 문자열로 합쳐준다. ✅ divmod() 내장 함수 결과로 (몫, 나머지) 값을 갖는 튜플을 반환한다. divmod(x, y) = (x // y, x % y) ✅ 리스트 안의 모든 값에 특정 함수를 적용시키려고 할 때 = map ! * 내 코드 def solution(strlist): answer = [] for x in strlist: answer.append(len(x)) return answer * 깔끔한 참고 코.. 2023. 5. 11.
코테준비 [인프런] 파이썬 알고리즘 문제풀이 2023. 5. 9.
[1분 요약] 백트래킹(Backtracking)이란? 백트래킹 이란? 해를 찾아가는 도중, 현재의 경로는 해가 될 수 없는 경우 그 경로를 더 이상 가지 않고 되돌아가는 기법을 말한다. DFS 알고리즘에서, 절대 불가능한 경우에 대해 조건문을 걸어 탐색을 중지하고 되돌아가는 경우가 대표적인 예이다. 불필요한 경로를 차단한다는 의미에서, '가지치기'라는 용어를 쓰기도 한다. 때문에 찾아가야할 경우의 수를 줄일 수 있으므로, 백트래킹 기법을 이용해 시간 단축을 노려볼 수 있다. * 핵심 표현 해가 될 가능성이 있는 경우, '유망하다(promising)' 라고 표현하고, 해가 될 가능성이 없는 경우에 그 경로를 가지 않게 하는 행위에 대해서는 '가지치기(pruning)'한다고 표현한다. 2022. 7. 27.
[1분 요약] 브루트 포스 알고리즘이란? Brute : 난폭한 Force : 힘 말 그대로 난폭한(=무식한) 힘으로 밀어붙이는 알고리즘을 의미한다. 방정식 문제를 풀 때 해를 찾기 위해 0부터 999까지 대입해본다면 브루트 포스 알고리즘을 적용했다고 볼 수 있다. 실생활에서도 핸드폰 비밀번호를 찾기 위해 0000부터 9999까지 직접 입력해 볼 수 있을 것이다. 이렇게 모든 경우의 수를 직접 확인하는 경우는 모두 브루트 포스 알고리즘에 속한다고 볼 수 있다. 그 중에서도 선형 구조를 완전 탐색하는 경우 '순차 탐색' 비선형 구조를 완전 탐색하는 경우'DFS(깊이 우선 탐색)', 'BFS(너비 우선 탐색)' 등의 방법이 있다. 2022. 7. 20.