반응형

자료구조 및 알고리즘/알고리즘 47

[알고리즘] DFS(깊이 우선 탐색) 정리

[알고리즘] DFS 정리 아래와 같이 두 가지 그래프가 있을 때 DFS 구현 방법에 대해 작성한다. 그래프 2가지 graph = [ [], [2,3,8], # 1번 노드에 연결된 노드: 2번, 3번, 8번 노드 [1,7], # 2번 노드에 연결된 노드: 1번, 7번 노드 [1,4,5], [3,5], [3,4], [7], [2,6,8], [1,7] ] graph2 = { 'A': ['B'], 'B': ['A', 'C', 'H'], 'C': ['B', 'D'], 'D': ['C', 'E', 'G'], 'E': ..

[알고리즘] 2018 KAKAO BLIND RECRUITMENT - [1차] 프렌즈4블록

2018 KAKAO BLIND RECRUITMENT - [1차] 프렌즈4블록 url: https://programmers.co.kr/learn/courses/30/lessons/17679 꽤나 시간이 걸렸던 문제. 2차열 배열 관련 문제가 나오면 지레 겁을 먹는다. 2차원 배열을 조만간 따로 연습해봐야겠다. 나의 풀이 def solution(m, n, board): deleted_count = 0 my_board = make_board(board) while True: candidates_set = set() # 겹치는 부분 찾기 for i in range(1, m): for j in range(1, n): if is_square(my_board, i, j): candidates_set = add_can..

[알고리즘] 2018 KAKAO BLIND RECRUITMENT - [3차] 파일명 정렬

2018 KAKAO BLIND RECRUITMENT - [3차] 파일명 정렬 URL: https://programmers.co.kr/learn/courses/30/lessons/17686 파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램의 과거 버전을 모두 담고 있어, 이름 순으로 정렬된 파일 목록은 보기가 불편했다. 파일을 이름 순으로 정렬하면 나중에 만들어진 ver-10.zip이 ver-9.zip보다 먼저 표시되기 때문이다. 버전 번호 외에도 숫자가 포함된 파일 목록은 여러 면에서 관리하기 불편했다. 예컨대 파일 목록이 [img12.png, img10.png, img2..

[알고리즘] 10진수를 n진수로 변경하기

10진수를 n진수로 변경하기 2018 KAKAO BLIND RECRUITMENT - [3차] n진수 게임을 풀며 10진수를 n진수로 변경하는 로직을 작성했었다. 생각보다 오래걸렸고 로직도 복잡하게 짜서 타인의 깔끔한 로직을 기록하려 한다. def solution(n, t, m, p): #재귀함수 이용 - 10진수를 n진수로 def convert(n, base): arr = "0123456789ABCDEF" q, r = divmod(n, base) if q == 0: return arr[r] else: return convert(q, base) + arr[r] answer = '' candidate = [] # 모든 턴의 답 for i in range(t*m): conv = convert(i..

[알고리즘] 2020 KAKAO BLIND RECRUITMENT - 후보키

2020 KAKAO BLIND RECRUITMENT - 후보키 url : https://programmers.co.kr/learn/courses/30/lessons/42890 고민을 많이 했지만 마땅한 답이 떠오르지 않은 문제. 특히 2차원 배열이 주어지고 각 열에 대한 요소들만을 묶는 로직을 구현하는 것이 조금 막막했다. 말로 설명하려니 어색하다. 글로 다시 정리해보자. 내가 생각하기에 깔끔한 코드 from itertools import combinations def solution(relation): row = len(relation) col = len(relation[0]) # 전체 조합 candidates = [] for i in range(1, col + 1): candidates.extend(..

[알고리즘] 2018 KAKAO BLIND RECRUITMENT - [1차] 뉴스 클러스터링

[알고리즘] 2018 KAKAO BLIND RECRUITMENT - [1차] 뉴스 클러스터링 2018 KAKAO BLIND RECRUITMENT - [1차] 뉴스 클러스터링 문제를 풀며 아름다운 코드를 발견했습니다. 저만 보기 아까워 기록하려합니다. url = https://programmers.co.kr/learn/courses/30/lessons/17677 내가 생각하기에 깔끔한 코드 import re from collections import Counter pattern = re.compile('[a-z][a-z]') def preprocessing(content): result = [] for i in range(0, len(content)-1): two_letter = conten..

[알고리즘] 2020 카카오 인턴십 - 수식 최대화

2020 카카오 인턴십 - 수식 최대화 url = https://programmers.co.kr/learn/courses/30/lessons/67257 문제 푸는데 꽤나 시간이 걸렸다. IDE 가 없는 환경에서 시험봐야 했다면 더 오래 걸렸을 것 같다. 가장 헷갈렸던 부분은 deque 자료구조에서 특정 인덱스 값을 지우는 부분과 그 이후의 인덱스 조작에서 많이 헤맸다... 아직 내공이 많이 부족한가보다. 더 열심히 풀자! 나의 소스코드 from itertools import permutations from collections import deque def solution(expression): answer = [] stack = deque(fill_stack(expression)) operator = ..

[알고리즘] 프로그래머스 2017 팁스타운 - 짝지어 제거하기

프로그래머스 2017 팁스타운 - 짝지어 제거하기 url = https://programmers.co.kr/learn/courses/30/lessons/12973 문제 설명 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = baabaa 라면 b aa baa → bb aa → aa → ..

[알고리즘] 프로그래머스 연습문제 - 다음 큰 숫자

프로그래머스 연습문제 - 다음 큰 숫자 url = programmers.co.kr/learn/courses/30/lessons/12911 비교적 간단한게 풀었던 문제이지만, 구글링이 불가능한 코딩 테스트라면 조금 버벅일 수 있을만한 문제였다. 이 문제에서는 bin() 함수를 사용해야 하는데 사용해 본 적이 없어서 조금 난감했을 것 같다. 해당 문제는 자연수 n이 주어졌을 때, n 의 다음 큰 숫자를 구하는 문제이고 조건은 아래와 같다. 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는..

[알고리즘] 2019 카카오 개발자 겨울 인턴십 - 튜플

2019 카카오 개발자 겨울 인턴십 - 튜플 url : https://programmers.co.kr/learn/courses/30/lessons/64065 2019 카카오 개발자 겨울 인턴십 - 튜플 문제를 풀며 익숙하지 않았던 것들에 대해 정리하고자 한다. s = "{{1,2,3},{2,1},{1,2,4,3},{2}}" 라는 문자열이 주어지면, 해당 문자열을 ['1,2,3', '2,1', '1,2,4,3', '2'] 처럼 변경해야 했다. 이 때, 나는 한 번에 숫자를 깔끔하게 나누는 것에 대해 미처 생각하지 못했다. 처음 나의 접근 방식 s = "{{1,2,3},{2,1},{1,2,4,3},{2}}" 문자열을 나눌 때 s[1:-1]을 통해 양 사이드의 괄호를 제거했다. 그리고 나서 스택을 만들어 괄호..

반응형