본문 바로가기

728x90

python

(22)
[Programmers] 124 나라의 숫자 (Python) 코딩테스트 연습 - 124 나라의 숫자 programmers.co.kr 1, 2, 4만 있는 나라에서 10진수를 어떻게 표현할 수 있는가? 라는 문제! 처음 딱 봤을 때 3진법으로 나타내고 0, 1, 2를 각각 매칭해주면 되겠네! 라고 간단하게 생각했다. 그러나 풀어서 생각해보니 0의 경우 단독으로 맨 앞자리에 올 수 없으므로 단순 매칭으로는 해결할 수 없다는 문제가 있었다! 숫자를 다 나열해서 비교해보며 찾아낸 규칙은 1. 3으로 나누어 떨어지지 않으면 3진법으로 나타낸 수를 그대로 사용하고 2. 3으로 나누어 떨어지는 경우 4를 대신 넣어주고, n // 3 -1 에서 이어서 계산을 해주면 된다. 이렇게 두 가지였다! 이러한 규칙만 찾아내면 간단하고, 입력으로 주어지는 숫자가 아무리 커도 시간 효율성도..
[Programmers] 2019 KAKAO BLIND RECRUITMENT - 후보키 (Python) 코딩테스트 연습 - 후보키 [["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 데이터베이스에서 사용할 수 있는 후보키의 개수를 구하는 문제! 효율적으로 보이지는 않지만 후보키의 개수가 많이 않기 때문에 combinations을 사용해서 구해도 충분히 시간안에 해결 가능한 문제였다! from itertools import combinations def solution(relation): answer = 0 n = len..
[BOJ] 1261. 알고스팟 (Python) 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net 오랜만에 푸는 벽 부수기 문제! 코테 준비를 하면서 제일 처음 벽 부수기 문제를 만났을 때는 머리 터지겠다.. 했는데 그래도 여러 BFS 문제를 풀어봐서인지 비교적 쉽게 풀 수 있었다! BFS의 대표 유형과 비슷한데 알고스팟에서 유의해야할 점은 "이미 지나간 곳이지만 더 적은 횟수로 벽을 부수고 지나갈 수 있는가?"라는 점이다! 더 적은 횟수로 벽을 부수고 지나갈 수 있다면 이미 방문한 곳이라도 다시 재방문을 해주어야 한다. 따라서 일반적으..
[Programmers] 힙(Heap) - 이중우선순위큐 (Python) 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 오랜만에 기초 문제 다시 풀기! heap 자료구조를 사용한 문제풀이는 정말 오랜만이라서 heapq 라이브러리의 간단한 사용법을 정리할겸 써본다. 파이썬에서는 내장 라이브러리로 heapq라는 기능을 제공하기 때문에 heap 문제를 매우 간단하게 풀 수 있다. 우선 heap을 사용해서 풀 때 유용한 유형은 "최댓값/최솟값을 반복적으로 리턴해야할 때"이다! 사용법은 간단하다. import heapq heap = [] # 그냥 리스트로 힙을 만들어준다 heapq.heappush(heap, 1) heapq.heappop(heap)​ 그냥 리스트로 힙을 만들어준 후 heapq라이브러리를 사용하여 값을 넣고, 빼주면 된다는 것! 만약 풀고자하는 문제가..
[Python] 난수 생성 시 가중치 (weights) 적용하기 python에서는 random 내장 라이브러리를 사용해서 난수를 쉽게 생성할 수 있습니다. >>> import random >>> random.choice(range(1, 6)) 4 그런데 만약에! 뽑히는 숫자에 확률을 더해주고 싶다면? 즉, 랜덤이긴 하지만 특정 숫자가 자주 뽑히도록 확률을 조정하고 싶다면? 바로 weights을 추가해주면 됩니다! >>> random.choices(range(1, 6), weights = [0.2, 0.3, 0.1, 0.1, 0.3]) [2] weights 변수에 넣어주면 뽑히는 대상이 뽑힐 확률을 적용해줄 수가 있습니다! 만약 한 숫자에 가중치를 몰아주게 되면 랜덤이지만 계속 같은 숫자가 나오는 것을 확인 할 수 있습니다! >>> random.choices(range..
[Python] TypeError: cannot perform reduce with flexible type (에러 해결 - list_eval, dtype) 데이터프레임을 csv 파일로부터 읽어와 np.mean을 하는데 만난 에러! TypeError: cannot perform reduce with flexible type 테스트 후 저장 할 때까지는 잘 작동했는데 다시 load하니 이런 에러를 만났다. 찾아보니 주로 이 에러는 수치형 데이터가 아닌 데이터로 수치형 연산을 하려할 때 발생한다고 한다. 그래서 확인해보니 나는 분명 수치형 데이터를 저장해주었는데 다시 load하는 과정에서 살펴보니 str 객체로 바뀌어있었다. 왜그럴까?! 찾아보니 pandas의 read_csv 함수 같은 경우 첫 번째 행의 데이터를 기준으로 각 column 별 데이터형 타입을 자동으로 맞추어주는데 종종 잘못 매칭을 해주는 경우가 있다고 한다. 그래서 굳이 데이터타입이 잘못 매칭되..
[BOJ] 9252. LCS 2 (Python) 9252번: LCS 2 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 오랜만에 코테 풀기! LCS란 최장 공통 부분 수열을 의미한다. 두 개의 문자열이 있을 때, 최장 공통 부분 수열이란 다음과 같다. ACAYKP CAPCAK ---------> ACAK 그렇다면 어떻게 최장 공통 부분 수열을 구할 수 있을까? 위 예시를 통해 최장 공통 부분 수열을 구하는 법을 살펴보자! 우선 아래와 같은 배열이 존재한다고 가정하자.행에 있는 문자를 기준으로 열에 해당 문자가 존재하는지 체크하고, ..
[Python] Function Annotation (':', '->' 이란?) project_azua github 코드를 분석하던 중 함수에서 -> symbol을 만나게 되었다. 예전에는 그냥 무심코 지나갔었는데 코드를 하나하나 분석하다보니 궁금증이 생겼다. 파이썬은 다른 언어에 비해 문법의 제약이 적은 편이다. 이로인해 유연성이 높고 쉬운 반면 작성된 코드를 봤을 때 해석하기에 비교적 모호할 수가 있다. 예를 들면 파이썬에서는 함수를 선언 할 때 파라미터의 타입을 따로 지정할 필요가 없어 개발자는 신경 쓸 부분이 훨씬 적다. 그러나 코드 작성자가 아닌 다른 개발자는 코드를 봤을 때 어떤 타입형이 들어가야 직관적으로 알기 힘들다. 따라서 이런 문제를 해결해주기 위해 사용하는 기능이 바로 "Function Annotation"이다. (Type hints) 공식 문서의 예시를 통해서 ..

728x90