본문 바로가기

Algorithm/Programmers18

[프로그래머스] 파이썬 - 충돌위험 찾기 (PCCP) 문제풀이진짜 오래걸렸다여러분은 저처럼 쓰레기같이 풀지마세요 저는 빡구현으로 풀었는데요생각해보니까 그냥 딕셔너리 key값에 현재 초 + 현재 좌표로 해두고 1씩 더해주면 되는 문제였어요...이동을 한 로봇 기준으로 돌려도 되는 문제였읍니다..코드from collections import defaultdictfrom collections import Counterimport copydef solution(points, routes): answer = 0 # 위치 좌표 딕셔너리 선언 positions = defaultdict(list) for i in range(len(points)): positions[i+1] = points[i] # key = 로봇의 .. 2024. 11. 1.
[프로그래머스] 파이썬 - 순위 검색 (KAKKO) 문제풀이첫번째 코드 - 시간초과from itertools import productdef check_query(language, job_type, ex_level, soulfood,score): global information cnt = 0 a = [] b = [] c = [] d = [] if language == "-": a = ["cpp", "java", "python"] else: a.append(language) if job_type == "-": b = ["backend", "frontend"] else: b.append(job_type) if ex_level == "-": .. 2024. 11. 1.
[프로그래머스] 파이썬 - 석유 시추 (PCCP) 문제풀이첫번째 코드 - 시간초과from collections import dequedef bfs(land,visited,i,j,ground,idx): cnt = 1 dx = [0,0,1,-1] dy = [1,-1,0,0] queue = deque([[i,j]]) visited[i][j] = True positions = [[i,j]] while queue: x,y = queue.popleft() for i in range(4): nx,ny = x+dx[i], y+dy[i] if nx>=0 and ny>=0 and nx 코드가 길고 비효율적이다. 처.. 2024. 10. 31.
[프로그래머스] 파이썬 - 수식 분석하기 (PCCP) 문제 풀이 구현 문제이다. 진법변환에 대해 잘 이해하고, 문제를 잘 읽어야 풀 수 있는 문제이다.문제 자체의 정답은 미지식(x)이 포함된 식에 결과값을 붙여 출력해주면 된다.  아래는 나의 풀이방법이다.  1. 입력을 받아 x가 포함되지 않은 정상적인 식(certain_expressions), x가 포함된 식(uncertain_expressions)으로 나눈다.for expression in expressions: x,sign,y,equal_sign,result = expression.split() if result == 'X': uncertain_expressions.append([x,sign,y]) else: certain_expressions.appe.. 2024. 10. 19.
[프로그래머스] 파이썬 - k진수에서 소수 개수 구하기 문제풀이1. 소수 구하기def is_prime_number(num): num = int(num) if num  0,1은 소수가 될 수 없으므로 조건 처리를 해주고,2부터 num까지의 수로 num을 나누어 하나라도 몫이 0이되면(나누어 떨어지면) False를 리턴해주는 함수이다.이때, 시간복잡도를 줄이기 위해 for문을 num까지 돌리는 것이 아닌 num의 제곱근까지만 돌리도록 해주었다. 2. K진수 구하기def k_number(n,k): string = '' while n>0: string += str(n%k) n //= k return string[::-1] n이 0이 될때까지 k로 나누어 해당 수를 string에 붙여주었다.. 2024. 10. 11.
[프로그래머스] 파이썬 - 스킬트리 문제풀이skill이라는 스킬 순서가 주어진다.skill_trees에 있는 각 스킬트리에 대해, skill 스킬 순서를 지키고 있는지 확인하는 문제이다. 나는 다음과 같이 풀이했다. 1. dic이라는 딕셔너리를 선언한다. 이 딕셔너리에는 각 스킬에 대한 선행 스킬 정보를 저장한다.# 딕셔너리에 각 스킬 별 선행 스킬 저장for i in range(len(prev_skill)): dic[prev_skill[i]] = prev_skill[:i] 2. skill_trees의 각 스킬트리를 검사한다.이때 all_exist라는 bool 값을 두었다. 3. 스킬 트리의 각 스킬을 검사한다.나는 스킬트리의 맨 뒤 스킬부터 검사했다.  4. 해당 스킬(skill_tree[j])을 쓰기 위해 배워야하는 선행 스킬 리.. 2024. 10. 9.
[프로그래머스] 파이썬 - 모음사전 문제 풀이1. 모든 경우의 수 구하기from itertools import productdef solution(word): answer = 0 alphabet = ['A', 'E', 'I', 'O', 'U'] array = [] for i in range(1,6): for j in product(alphabet,repeat = i): array.append(''.join(j)) array.sort() return array.index(word)+1 product를 사용하여 1~5 길이의 모든 단어의 경우의 수를 구해주었다.이후 배열에서 word의 인덱스를 구해주고 1을 더해주면 답이 나온다. 2. dfsdef dfs(word,.. 2024. 10. 7.
[프로그래머스] 파이썬 - 점찍기 문제풀이처음 작성한 코드def solution(k, d): answer = 0 for i in range(0,d+1,k) : for j in range(0,d+1,k): if (i**2 + j**2)  문제 조건을 그대로 입력했다.k와 d의 제한사항이 각각 최대 백만이기 때문에, 이중 for문을 사용하면 안되는 문제였다. 따라서 아래 공식을 이용하여 j의 값을 구해주었다.피타고라스 정리에 의해 i² + j² = d² 이므로 (i는 x축, j는 y축, d는 최대 길이이다)j² = d² - i² 이다. 이 공식으로 j를 구한 후 j를 k로 나눈 정수 몫 + 1이 해당 i값이 x값일 때의 j값의 개수이다.  정답 코드def solution(k, d): a.. 2024. 10. 3.
[프로그래머스] 파이썬 - 이모티콘 할인 행사 문제제한 사항  풀이# 각 이모티콘의 할인율에 대한 모든 경우의 수를 구하는 dfsdef dfs(temp, depth): global array percentage = [10,20,30,40] # 이모티콘의 개수 만큼 dfs가 돌았을 때 if depth == len(temp): # 얕은 복사를 통해 새로운 temp 생성 array.append(temp[:]) return for p in percentage: temp[depth] += p dfs(temp, depth + 1) temp[depth] -= p 각 이모티콘들은 10, 20, 30, 40의 할인율 중 하나의 할인율을 가질 수 있다.따라서 .. 2024. 10. 1.