본문 바로가기

python

(15)
99클럽 - 선택의 기로 30970번: 선택의 기로 첫 번째 줄에는 첫 번째 방법을 선택했을 때의 첫 번째로 고른 촉석루 미니어처의 품질과 가격, 두 번째로 고른 촉석루 미니어처의 품질과 가격을 공백으로 구분하여 순서대로 출력한다. 두 번 www.acmicpc.net 아이디어 정렬 문제이다. 선택 방법은 서로 영향이 없다고 되어있기 때문에 원본을 훼손하지 않는 sorted를 사용했고, 선행 정렬 조건이 중복되는 경우 후행 정렬 조건이 존재하기 때문에 lambda를 사용했다. 풀이 n = int(input()) miniatures = [] for _ in range(n): q, p = map(int, input().split()) miniatures.append((q, p)) first = sorted(miniatures, key..
99클럽 - H-Index, 프로세스 H-Index 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 문제 이해가 굉장히 어려웠다. 논문 n 편 중, h번 이상 인용된 논문이 h 편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 H-index이다. 위 H-index의 설명이 문제인 것 같은데 말을 조금 바꿔 보자면 n편의 논문 중 A번 이상 인용된 논문의 수가 B라면 A와 B 중 작은 값이 H-index이다. 풀이 def solution(citations): citations.sort(reverse=True) n = len(citations) for idx in range..
99클럽 - 제리와 톰1 17504번: 제리와 톰 2 $$ 1 - \cfrac{1}{2 + \cfrac{1}{7 + \cfrac{1}{1 + \cfrac{1}{8}}}} = 1 - \cfrac{1}{2 + \cfrac{1}{7 + \cfrac{8}{9}}} = 1 - \cfrac{1}{2 + \cfrac{9}{71}} = 1 - \cfrac{71}{151} = \cfrac{80}{151} $$ www.acmicpc.net 아이디어 풀이 _ = input() input_string = input() values = list(map(int, input_string.split())) n = 0 d = 1 for val in reversed(values): n, d = d, val * d + n remain = d - n tot = d..
99클럽 - 행렬 테두리 회전하기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 풀이 def solution(rows, columns, queries): template = [[y * columns + x + 1 for x in range(columns)] for y in range(rows)] answer = [] for query in queries: y1, x1, y2, x2 = [i - 1 for i in query] min_value = float('inf') top_left = template[y1][x1] # 좌 for y in range(y1, y2): templa..
99클럽 - 큰 수 만들기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 단순해 보이지만 거슬리는 조건이 몇 가지 있다. 문제 조건 상 정렬 순서는 유지 돼야한다. number는 2자리 이상, 1,000,000자리 이하인 숫자입니다. 입력이 100만으로 매우 무거운 계산이 예상되기 때문에 경우의 수를 전부 비교할 수 없다. 어떤 값이 작은 값인지 확인하기 위해 정렬을 사용 할 수 없다. 이는 숫자 각각의 크기외에 자릿수 라는 다른 변수가 있기 때문이다. 기본적으로는 앞에서부터 순서대로 훑어가며, 지금 가리키고 있는 숫자가 이전의 숫자보다 크다면 지금 숫자를 이전 숫자 대신..
99클럽 - 공원 산책, 예상 대진표 공원 산책 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 두더지 문제로 유명한 2차원 배열의 경로탐색 문제의 변형이다. 최단거리 찾기 보다는 난이도가 낮은 편으로, DFS나 BFS 없이 경로의 유효성을 따져 이동거리를 반환하기만 하면 된다. 풀이 def solution(park, routes): height, width = len(park), len(park[0]) obstacles = {(y, x) for y in range(height) for x in range(width) if park[y][x] == 'X'} dog_position = ..
99클럽 - 전력망을 둘로 나누기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 이 전선들 중 하나를 끊어서 현재의 전력망 네트워크를 2개로 분할하려고 합니다. 이때, 두 전력망이 갖게 되는 송전탑의 개수를 최대한 비슷하게 맞추고자 합니다. 위 조건을 보고 빠르게 떠올릴 수 있는 것은 다음과 같다. 트리를 만들어야 한다. 매번 탐색하는 건 문제가 좀 있다. 트리가 있다면 각 노드의 서브트리를 계산해 두는 건 많은 경우에서 이득이다. 그리고 이 문제에서 서브트리를 계산해 두는 건 핵심이자 굉장히 많이 이득이다. 트리는 흔하지만 중요한 자료구조로 생성부터 탐색까지 자세히 정리해 본다..
99클럽 - 연속된 부분 수열의 합 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 가장 처음 생각해 볼 수 있는 방법은 무빙 윈도우로 다음과 같다. head를 0, tail을 1로 초기화한다. head ~ tail의 합이 k보다 작으면 tail을 1 증가 시킨다. head ~ tail의 합이 k보다 크면 head를 1 증가 시킨다. head ~ tail의 합이 k와 같으면 이 둘을 저장하고 head를 1 증가 시킨다. head와 tail이 같으면 tail을 1 증가 시킨다. 저장된 head와 tail 쌍중 tail - head의 값이 작은 순으로 정렬한다. 정렬된 쌍들 중 tail..
99클럽 - 신고 결과 받기, 개인정보 수집 유효기간 신고 결과받기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 이전에 풀어봤던 문제다. 당시엔 각각 딕셔너리로 만들어 이 둘을 연결 지어 풀었던 것 같은데 아마 관계형 데이터베이스를 생각했던 것 같다. 알다시피 관계형 데이터베이스는 관리가 쉬운 거지 그리 효율적인 데이터 베이스는 아니기도 하고, 이번에는 데이터 처리 과정에서 예외처리로 의미 없는 연산의 수를 줄이는 방법을 선택했다. 유의해서 봐야 할 조건은 다음과 같다. 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다. 자기 자신을 신고하는 경우는 없습니..
99클럽 - JadenCase 문자열 만들기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 아이디어 Python의 문자열은 배열과 비슷하면서도 많이 다르다. 때문에 접근방법은 비슷하면서도 호환이 안 되는 경우가 많기 때문에 우회해서 푸는 잔머리가 중요하다. 유의할 점은 문제 조건의 "공백문자가 연속해서 나올 수 있습니다." 부분이다. 이 조건 때문에 rstrip이나 lstrip을 쓸 수도, 맘 편히 뗐다 붙였다도 할 수 없다. 단어의 위치는 find 메서드로 찾고, 데이터 조작 범위는 무빙 윈도우와 비슷하게 구현했다. 풀이 def solution(s): answer = "" for word in s..