본문 바로가기

Programming207

[프로그래머스] 전력망을 둘로 나누기 (Python) https://programmers.co.kr/learn/courses/30/lessons/86971 코딩테스트 연습 - 전력망을 둘로 나누기 9 [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] 3 7 [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] 1 programmers.co.kr 전선을 하나씩 끊어 보며 bfs로 풀었다. from collections import deque def solution(n,wires): answer = 101 for i in range(len(wires)): wire = wires[:i] + wires[i+1:] graph = [[] for _ in range(n+1)] visited = [False for _.. 2021. 11. 3.
[프로그래머스] 교점에 별 만들기 (Python) https://programmers.co.kr/learn/courses/30/lessons/87377 코딩테스트 연습 - 교점에 별 만들기 [[2, -1, 4], [-2, -1, 4], [0, -1, 1], [5, -8, -12], [5, 8, 12]] ["....*....", ".........", ".........", "*.......*", ".........", ".........", ".........", ".........", "*.......*"] [[0, 1, -1], [1, 0, -1], [1, 0, 1]] ["*.*"] [[1, -1, 0], [2, -1, 0], [4, - programmers.co.kr 2차원 평면상의 좌표와 2차원 배열의 좌표를 구하는데 시간이 오래 걸렸던 문제다... 2021. 11. 3.
[프로그래머스] 영어 끝말잇기 (Python) https://programmers.co.kr/learn/courses/30/lessons/12981 코딩테스트 연습 - 영어 끝말잇기 3 ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] [3,3] 5 ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] [0,0] programmers.co.kr 스택을 통해 구현했다. 나의 풀이 def solution(n, words): stac.. 2021. 11. 2.
[프로그래머스] 삼각 달팽이 (Python) https://programmers.co.kr/learn/courses/30/lessons/68645 코딩테스트 연습 - 삼각 달팽이 5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] programmers.co.kr 규칙을 찾아서 구현하면 된다. 항상 아래 , 오른쪽, 왼쪽 위 방향으로 움직인다. 나의 풀이 def solution(n): a = [['']*n for _ in range(n)] check = 0 now = [-1,0] num = 1 answer = [] for i in range(n,0,-1): x, y = now if check ==0: # down now = [x.. 2021. 11. 2.
[프로그래머스] 2개 이하로 다른 비트(Python) https://programmers.co.kr/learn/courses/30/lessons/77885 코딩테스트 연습 - 2개 이하로 다른 비트 programmers.co.kr 처음에 xor 연산 + count('1') 2021. 11. 2.
[프로그래머스] 프렌즈4블록(Python) https://programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr 주어진 조건대로 구현하면 된다. 나는 set으로 중복을 방지하고, 블록이 내려오는 것은 제거할 블록을 x 순으로 오름차순 정렬한 후 제거할 블록부터 맨 위칸까지 한 칸씩 모두 훑는 방식으로 구현했다. 나의 코드 def solution(m, n, board): answer = 0 check = True for i in range(m): bo.. 2021. 11. 2.
[프로그래머스] 피로도 (Python) https://programmers.co.kr/learn/courses/30/lessons/87946 코딩테스트 연습 - 피로도 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던 programmers.co.kr 그리디 + 완전 탐색으로 풀었다. 던전 총개수를 세고, 최대 던전 개수부터 내려오면서 순열을 만든 다음 모두 탐색하며 조건에 만족하면 바로 return 하도록 코드를 작성했다. 나의 풀이 from itertools import permutations def solution(k, dungeons): dungeons_count = len(dungeons) d.. 2021. 11. 1.
[프로그래머스] 배달 (Python) https://programmers.co.kr/learn/courses/30/lessons/12978 코딩테스트 연습 - 배달 5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4 programmers.co.kr 다익스트라 알고리즘으로 풀이했다. 주의할 점은 방향성이 없는 간선이므로 도로 정보를 받았을 때 양쪽 마을에 다 추가를 시켜줘야 하고, 간선의 최대 길이는 10,000이지만 배달 시간은 500,000 이하인 것을 주의해서 문제를 풀어야 한다. 나의 풀이 import heapq def solution(N, road, K): answer = .. 2021. 11. 1.
[프로그래머스] 괄호 회전하기 (Python) https://programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 올바른 괄호인지 체크하는 코드와, 왼쪽으로 회전하는 것을 어떻게 짜는지만 고민하면 되는 간단한 구현 문제다. 올바른 괄호 여부에서 dict를 활용하니 훨씬 깔끔하게 풀 수 있었다. 나의 풀이 def check_correct(s): bracket_dict = {']':'[',')':'(','}':'{'} stack = [] for v in s: if len(stack) ==0: stack.append(v) elif v in bracket_dict: if bracket_dict[v] == stack[-1]: stack.pop() else: r.. 2021. 11. 1.
[프로그래머스] 후보키 (Python) https://programmers.co.kr/learn/courses/30/lessons/42890 코딩테스트 연습 - 후보키 [["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]] 2 programmers.co.kr 꽤나 애를 먹었던 문제였다. 내가 풀었던 알고리즘은 1. 속성의 개수를 카운트하고 속성을 조합 2. 각 속성으로 유일성을 만족하는지 확인 3. 현재 조합한 속성이 기존에 조합했던 속성과 겹치는 것이 있는지 다시 조합 후 확인(최소성 만족하는.. 2021. 11. 1.
[프로그래머스] 순위 검색(Python) https://programmers.co.kr/learn/courses/30/lessons/72412 = int(want[4]): suc_candidate+=1 answer.append(suc_candidate) return answer 처음에 막 손가는대로 풀었을 때 정확성은 모두 맞았지만 효율성에서 모두 시간 초과가 났다. 리스트를 사용하면서 조회할 때 많은 시간이 걸린다고 판단해서 set이나 dict를 사용해서 풀 생각이 들었다. 수정된 풀이 from itertools import combinations from collections import defaultdict from bisect import bisect_left def combination_cases(data): cases = [] for.. 2021. 11. 1.
[프로그래머스] 예상 대진표(Python) https://programmers.co.kr/learn/courses/30/lessons/12985 코딩테스트 연습 - 예상 대진표 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N programmers.co.kr 대진표 조건에 따라 구현하면 된다. 두 명이 같은 라운드에 있는 경우는 a-b의 절댓값이 1이고 둘을 더한 값에 4를 나눴을 때 나머지가 3이면 성립한다. Ex: (1,2) , (3,4) , (5,6) -> 모두 3+4n의 규칙을 가진다. 다음 라운드의 번호를 구하려면 홀수일 경우 +1 후 2로 나누고 짝수일 경우 그냥 2로 나눠준다 나.. 2021. 10. 31.
[프로그래머스] 게임 맵 최단거리(Python) https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr 전형적인 BFS 문제다 나의 풀이 from collections import deque def solution(maps): n,m = len(maps), len(maps[0]) visited = [[0]*m for _ in range(n)] visited[0][0]=True move = [(1,0),(-1,0.. 2021. 10. 31.
[프로그래머스] 거리두기 확인하기(Python) https://programmers.co.kr/learn/courses/30/lessons/81302 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr 맨해튼 거리 1일 때, 2일 때를 나눠서 생각해보면 쉽게 풀 수 있는 문제였다. 확실히 2.. 2021. 10. 31.
[프로그래머스] 뉴스 클러스터링(Python) https://programmers.co.kr/learn/courses/30/lessons/17677 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브 programmers.co.kr Counter를 활용해서 주어진 조건대로 구현해서 풀었다. 나의 풀이 from collections import Counter def solution(str1, str2): str1 = str1.upper() str2 = str2.upper() intersection, union = 0 , 0 word_list1, word_list2 = [.. 2021. 10. 30.