본문 바로가기

Programming207

[프로그래머스] 아이템 줍기 (Python) https://programmers.co.kr/learn/courses/30/lessons/87694 코딩테스트 연습 - 아이템 줍기 [[1,1,7,4],[3,2,5,5],[4,3,6,9],[2,6,8,8]] 1 3 7 8 17 [[1,1,8,4],[2,2,4,9],[3,6,9,8],[6,3,7,7]] 9 7 6 1 11 [[2,2,5,5],[1,3,6,4],[3,1,4,6]] 1 4 6 3 10 programmers.co.kr 어려웠던 문제다. bfs로 풀었다. 1. 시작 지점에서부터 U, D, R, L 방향으로 하나씩 이동 2. 이동 후 조건에 맞는지 확인 - 좌표 범위를 넘어갔으면 continue - 방문 한 적이 있다면 continue - 주어진 직사각형들을 하나씩 순회하며 직사각형 좌표를 받는다.. 2021. 11. 11.
[프로그래머스] 경주로 건설 (Python) https://programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr 어려웠다... bfs + dp로 풀어냈는데 계속 틀려서 확인해보니 board = [ [.. 2021. 11. 10.
[프로그래머스] 합승 택시 요금 (Python) https://programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr 매 지점까지 같이 합승했다고 치고 그 지점에서 각자 목적지로 이동했을 경우에서 요금.. 2021. 11. 10.
[프로그래머스] 금과 은 운반하기 (Python) https://programmers.co.kr/learn/courses/30/lessons/86053 코딩테스트 연습 - 금과 은 운반하기 어느 왕국에 하나 이상의 도시들이 있습니다. 왕국의 왕은 새 도시를 짓기로 결정하였습니다. 해당 도시를 짓기 위해서는 도시를 짓는 장소에 금 a kg과 은 b kg이 전달되어야 합니다. 각 도시에는 programmers.co.kr 이진 탐색으로 풀면 된다. 나의 풀이 def solution(a, b, g, s, w, t): start = 0 end = int(1e9*1e5*2*2) answer = end while start= a and all_silver >= b and all_total >= a+b : # 시간 더 줄이기 answer = min(answer,mid.. 2021. 11. 10.
[프로그래머스] 불량 사용자 (Python) https://programmers.co.kr/learn/courses/30/lessons/64064 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr 쉬울 줄 알았는데 생각보다 오래 걸렸다.. 처음 풀이는 ban 사용자 가지고 조합을 짜서 user_id를 만족하면 answer를 추가해주는 방식으로 코드를 짰다. 처음 풀이 import re from collections import Counter from itertools import product def solution(user_id, banned_id): .. 2021. 11. 9.
[프로그래머스] 보석 쇼핑 (Python) https://programmers.co.kr/learn/courses/30/lessons/67258 코딩테스트 연습 - 보석 쇼핑 ["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7] programmers.co.kr 투 포인터 문제다. 처음에 set을 이용해서 각각의 경우마다 set(gems[start : end +1]) == set(gems) 이렇게 풀었었는데, 효율성 테스트에서 시간 초과가 났다. 시간초과가 날 때 입력 값의 범위를 고려해서 알고리즘을 변경하거나 set or dict를 활용할 생각을 해야겠다. 나의 풀이 def solution(gems): start, end, answer = 0, 0, [0, len(g.. 2021. 11. 9.
[프로그래머스] 순위 (Python) https://programmers.co.kr/learn/courses/30/lessons/49191 코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr 1. 승패 결과로부터 승자와 패자 정보를 그래프에 담는다. 2. A에게 이긴 선수는 A가 이긴 선수도 이긴다. 3. A에게 진 선수는 A를 이긴 선수에게도 진다. 4. A와 승패가 결정된 사람의 수가 전체 선수 -1 이면 answer에 추가해줌 나의 풀이 def solution(n, results): answer = 0 graph = [[set() for _ in range(2)] for _ in range(n+1)] for result in results: # 승자 .. 2021. 11. 8.
[프로그래머스] 가장 먼 노드 (Python) https://programmers.co.kr/learn/courses/30/lessons/49189 코딩테스트 연습 - 가장 먼 노드 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr 다익스트라 알고리즘으로 구현해서 풀면 된다. 무방향 그래프이기 때문에 양쪽 방향으로 이동 가능한 것을 설정해줘야 함. 나의 풀이 from collections import deque def solution(n,vertex): graph = [[] for _ in range(n+1)] visited = [0 for _ in range(n+1)] for ver in vertex: graph[ver[0]].append(ver[1]) gr.. 2021. 11. 8.
[프로그래머스] 추석 트래픽 (Python) https://programmers.co.kr/learn/courses/30/lessons/17676 =start1 and end1>hist2[0]: counting_0 +=1 if hist2[1]>=start2 and end2>hist2[0]: counting_1 +=1 answer = max(answer,counting_0,counting_1) return answer 2021. 11. 8.
[프로그래머스] 빛의 경로 사이클 (Python) https://programmers.co.kr/learn/courses/30/lessons/86052 코딩테스트 연습 - 빛의 경로 사이클 각 칸마다 S, L, 또는 R가 써져 있는 격자가 있습니다. 당신은 이 격자에서 빛을 쏘고자 합니다. 이 격자의 각 칸에는 다음과 같은 특이한 성질이 있습니다. 빛이 "S"가 써진 칸에 도달한 경우, 직진 programmers.co.kr 각각의 위치에 대해서 모든 방향으로 방문했는지 체크하면서, 이동할 때에 규칙을 잘 설정해야 한다. 마지막에 오름차순으로 정렬하는걸 못 봐서 한참 헤맸다. 나의 풀이 from collections import deque def solution(grid): answer =[] len_x, len_y = len(grid),len(grid[.. 2021. 11. 7.
[프로그래머스] N개의 최소공배수 (Python) https://programmers.co.kr/learn/courses/30/lessons/12953 코딩테스트 연습 - N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배 programmers.co.kr 최소 공배수 구현 문제 나의 풀이 import math def lcm(a,b): return a*b // math.gcd(a,b) def solution(arr): if len(arr) ==1: return arr[0] else: a = lcm(arr[0],arr[1]) for i in arr[2:]: a = lcm(a.. 2021. 11. 7.
[프로그래머스] JadenCase 문자열 만들기 (Python) https://programmers.co.kr/learn/courses/30/lessons/12951 코딩테스트 연습 - JadenCase 문자열 만들기 JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 programmers.co.kr 문제 조건이 좀 명확하게 와닿지 않아서 풀다가 헤맸다 예를 들어, 입력으로 주어지는 s가 AAA aa aa 라면 (중간에 공백 중복) 라면 결과로는 Aaa Aa Aa가 나와야 한다. 즉, 공백이 그대로 유지돼야 한다. 이는 split( ) 으로 하면 여러 개 공백을 하나로 치기 때문에 틀린다. 따라서 s.. 2021. 11. 7.
[프로그래머스] 행렬의 곱셈 (Python) https://programmers.co.kr/learn/courses/30/lessons/12949 코딩테스트 연습 - 행렬의 곱셈 [[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]] programmers.co.kr 행렬의 곱셈을 구현하면 됨, 뭔가 손 가는 대로 해서 이상한 감이 있는 것 같다. 나의 풀이 def solution(arr1, arr2): arr3 = [[0]*len(arr2) for _ in range(len(arr2[0]))] for i in range(len(arr3)): for j in range(len(arr3[0])): arr3[i].. 2021. 11. 7.
[프로그래머스] 피보나치 수(Python) https://programmers.co.kr/learn/courses/30/lessons/12945 코딩테스트 연습 - 피보나치 수 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = programmers.co.kr DP 유형의 대표격인 피보나치 수 문제다 나의 풀이 def solution(n): fibo = [0]*(n+1) fibo[0],fibo[1] = 0, 1 for i in range(2,n+.. 2021. 11. 7.
[프로그래머스] 최댓값과 최솟값 (Python) https://programmers.co.kr/learn/courses/30/lessons/12939 코딩테스트 연습 - 최댓값과 최솟값 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를 programmers.co.kr 나의 풀이 def solution(s): num_list = list(map(int,s.split())) max_num,min_num = max(num_list),min(num_list) return str(min_num)+' '+str(max_num) 2021. 11. 7.