본문 바로가기
반응형

파이썬56

[프로그래머스][탐욕법(그리디)] 체육복 programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 해설 각 학생이 가지고 있는 체육복의 수를 dictionary를 이용하여 만든다 각 요소를 오른쪽 방향으로 순회한다. 체육복을 한개 이상 들고 있을시 왼쪽 학생먼저 체육복이 없을경우 빌려주고 그다음으로 오른쪽 학생을 체크 한다. def solution(n, lost, reserve): answer = n mydict = {} for i in range(1,n+1): mydict.. 2021. 4. 1.
[프로그래머스][힙] 디스크 컨트롤러 programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 해설 대기하는 작업들중 수행시간이 가장 작은작업을 먼저 처리해야 한다. 현재 작업중인 작업이 [0, 3] 라고 하자 대기 작업 [1, 9], [2, 6] 이 있다고 하자 저기서 대기작업들의 걸리는 시간을 생각해보면 간단하다. 만약 대기작업이 2개가 있다고 치자. 각각 걸리는 작업의 시간은 앞에오는놈 : (현재 작업중인 작업의 종료시간 - 앞에오는놈의 시작시간) + 앞에오.. 2021. 3. 31.
[프로그래머스][정렬] 가장 큰 수 programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 아이디어 문자열 A+B, 로 만든 숫자와 B+A로 만든 숫자를 비교하여 어느게 더 큰수인지 확인하고 정렬한다 파이썬 문자열 비교를 이용하면 사전순으로 정렬해주는데 이걸 수 비교수단으로 이용할 수 있다 답이 0일 경우에는 0만 리턴해준다.(마지막 테스트 케이스) from functools import cmp_to_.. 2021. 3. 24.
파이썬 any, all 활용하기 파이썬 내부에서 any와 all의 함수 구현은 아래와 같다. 그냥 리스트 순회하면서 True False만 체크해주는 함수이다. any => 요소중에 하나라도 True가 있으면 True 리턴, 전부다 False이면 False 리턴 all => 요소 모두가 True이면 True 리턴, 하나라도 False가 있으면 False 리턴 def any(iterable): for element in iterable: if element: return True return False def all(iterable): for element in iterable: if not element: return False return True 특정 조건을 어떤 리스트에서 체크 할 때 파이썬에서는 any와 all을 활용하여 코드를 .. 2021. 3. 19.
[프로그래머스][해시] 위장 programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 이걸 해시라고 해야하는게 맞는건지... 그냥 순열 문제이다. 모자가 3개, 옷이 5개, 신발이 4개 있다 치자 모자를 고르는 경우의수는 3+1 = 4 (+1은 선택하지 않음을 의미) 옷을 고르는 경우의수는 5+1 = 6 신발을 고르는 경우의수는 4+1 = 5 문제에서 아예 안고르는 경우의 수는 빼라 했으므로 마지막에 -1 해주면 된다. 4 * 6 * 5 - 1 이런식으로 풀면된다. def solution(clothes): answer = 0 mydict = {} for i in clothes: if i[1] in mydict: mydict[i[1]] = mydi.. 2021. 3. 17.
파이썬 딕셔너리 순회하기 mydict = {"key1":"value1", "key2":"value2", "key3":"value3"} for key in mydict: print(key) #key값만 출력됨 for key, value in mydict.items(): print(key, value) #key, value 출력됨 key1 key2 key3 key1 value1 key2 value2 key3 value3 딕셔너리를 변수 하나로만 순회하면 key값만 나온다. value값 까지 순회하고 싶으면 items라는 함수를 이용하자. 2021. 3. 17.
[프로그래머스][해시] 전화번호 목록 programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 문제는 풀었는데 다른사람이 파이썬 내장함수로 한줄로 푸는거 보고 충격... 정리 따로 해야겠다. 아이디어는 이렇다. 전화번호부로 set을 이용해 hash테이블을 만든다. 각번호를 순회하면서 이중포문을 통하여 번호의 부분문자열을 얻은뒤 hash 테이블에 있는지 확인한다. hashtable에 있다면 누군가의 접두어가 된다는 뜻이므로 False를 리턴한다 이렇게 하면 시간복잡도.. 2021. 3. 12.
파이썬 Counter 객체 사용하기 docs.python.org/3/library/collections.html#collections.Counter collections — Container datatypes — Python 3.9.2 documentation collections — Container datatypes Source code: Lib/collections/__init__.py This module implements specialized container datatypes providing alternatives to Python’s general purpose built-in containers, dict, list, set, and tuple. namedtuple() factory f docs.python.org 알고리.. 2021. 3. 12.
[프로그래머스][해시] 완주하지 못한 선수 programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr c++스타일로 풀어봤다. completion 배열을 dictionary로 만들어준다. value값을 기본적으로 1로 주고 동명이인이 있는경우 value에 1을 더해주어 몇명이 있는지 세어준다. 이후 participant를 확인하면서 이름이 존재 할 때 마다 value값을 -1씩 해준다. value가 0이거나 dictionary에 없는경우가 답이므로 해당값 .. 2021. 3. 12.
[백준 1463] 1로 만들기 www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net Top-Down으로 푸니깐 메모리 초과가 난다. 파이썬으로 알고리즘 풀면 뭔가 코드가 간결하긴 한데 이런거에 있어서 제약이 심한듯 ㅠ 재귀함수 사용할 때 recursion제한도 풀어주어야 하고... 고려할게 많다. bottom-up으로 풀면 쉽게 풀린다. x = int(input()) dp = [987654321 for _ in range(1000000+1)] dp[1] = 0 for i in range(2, x+1): if i % 3 == 0: dp[i] = min(dp[i], dp[i//3] + 1) if i % 2 ==.. 2021. 3. 11.
list indices must be integers or slices, not float 파이썬 리스트 인덱스가 float일 경우에 발생하는 에러이다. 문제 풀다가 저런 에러를 마주쳤는데 보통 파이썬에서 나누기를 할 때 가끔 int형에서 float 형으로 바뀌는 경우가 있다. 나누기를 할 때 / 이 아닌 // integer division을 사용해주면 보통 해결된다. 2021. 3. 11.
파이썬 print 줄바꿈 없이 출력하기 파이썬 print() 함수는 실제로는 아래와 같은 형태로 되어있다. print(, end='\n') 저 개행문자를 원하는것으로 바꾸어 주면 된다. print(, end=' ') 2021. 3. 11.
RecursionError: maximum recursion depth exceeded while calling a Python object 파이썬에서는 기본적으로 재귀함수 호출을 1000으로 제한하고있다. 아래의 방법으로 recursion limit 제한을 커스텀 할 수 있다. import sys sys.setrecursionlimit(9999) 2021. 3. 11.
[백준 15649] N과 M (1) www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으.. 2021. 3. 11.
파이썬 heapq 커스텀 정렬 이용하기 파이썬에서 커스텀 정렬을 이용할 때 리턴값을 True False가 아닌 1, -1로 해주어야 함을 확인하였다. 이번에는 여러개의 멤버변수를 가진 클래스를 heapq를 이용해 heap을 만들어줄 때 custom comparator를 어떻게 이용하는지 알아보자. 결론부터 말하면 class 안에 __lt__(self, other) 함수를 재정의 해 주고 return 값은 True False로 해주면 된다. 이유는 간단하다. heapq의 소스코드를 분석해보면 힙정렬을 할 때 연산기호로 < 를 사용하기 떄문에 __lt__ 재정의 해 주어야 한다 위에 보면 연산기호가 < 인것을 확인할 수 있다 import heapq class node: def __init__(self, A, B): self.A = A self.B.. 2021. 3. 10.
파이썬 커스텀 정렬 이용하기 파이썬 3.x 이상 버전 from functools import cmp_to_key def comp(x, y): if x[0] 0 def __eq__(self, other): return mycmp(self.obj, other.obj) == 0 def __le__(self, other): return mycmp(self.obj, other.obj) = 0 __hash__ = None return K 리스트 내부 sort 안에 custom comparator를 넣어주는 케이스도 위와 동일하다. l.sort(key=cmp_to_key(comp)) 파이썬 2.x 버전 def custom_cmp(x, y): if x[0] > y[0]: return True else: return -1 l = [] l.appen.. 2021. 3. 10.
반응형