본문 바로가기
반응형

Python62

[프로그래머스] 쌍둥이 빌딩 숲 https://school.programmers.co.kr/learn/courses/30/lessons/140105?language=python3# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 나머지 연산이 있는걸 보니 전형적인 dp 문제이다. (n,c) 를 (n-1,c-1) 과 (n-1,c)로 나누어 생각한다. 새로들어온 n이 두개가 다 가장 뒤로 배치된다고 하자. n은 어차피 가장 크므로 나머지 경우의수는 solution(n-1, c-1)이 될 것이다. 만약 n의 건물 사이에 아래처럼 다른건물이 들어오거나 앞서있다면? (n, n-1)의 이 한쌍.. 2022. 12. 10.
파이썬 Queue vs Deque 어느것을 사용할 까? Queue와 Deque 알고리즘을 풀 때 어느것을 사용해야 될 까 queue — A synchronized queue class — Python 3.7.14 documentation queue — A synchronized queue class Source code: Lib/queue.py The queue module implements multi-producer, multi-consumer queues. It is especially useful in threaded programming when information must be exchanged safely between multiple threads. The Queue docs.python.org 파이썬 공식문서의 Queue 모듈 내용을 보면 .. 2022. 12. 9.
파이썬 알고리즘 팁 및 필수 지식 1. input 빠르게 받기 import sys n, m = map(int, sys.readline().split()) 2. 문자 숫자 변환 chr 함수와 ord 함수를 이용한다 chr(65) # A ord('A') # 65 3. List Comprehension 응용 keys = [ key for key, value in dict ] values = [ value for key, value in dict ] keysValues = [ (key,value) for key, value in dict] map = [ [] for _ in range(n)] # 텅빈 2차원 배열 zeros = [0] * 10 >>> [ [i,i+1] for i in range(10)] [[0, 1], [1, 2], [2, 3].. 2022. 12. 8.
AttributeError: 'module' object has no attribute 파이썬은 참으로 쉬운 언어이다. 배우지 않아도 개발을 바로 할 수 있을만큼 쉽고 간단하고 강력하다. 그러나 위 에러를 마주하게 된다면 멘붕이 올 것이다. 결론부터 말하면 위 에러를 마주했다는 것은 파이썬의 모듈과 패키지에 대한 이해가 부족한 것이다. 그리고 아마 당신은 패키지를 import했는데 그걸 모듈처럼 사용해서 문제가 생겼을 것 이다. 1. 모듈이란? 파이썬에서 모듈은 .py로 끝나는 파일들 그 자체를 얘기한다. 2. 패키지란? 패키지란 아래처럼 __init__.py 파일을 가지는 폴더 구조를 얘기한다 root/ Package/ __init__.py module1.py module2.py 위 폴더에서는 root 폴더 밑에 Package라는 패키지가 있고, 그 패키지는 module1.py를 가지고 .. 2022. 12. 8.
[파이썬] global과 nonlocal 이해하기 https://docs.python.org/3/tutorial/classes.html 9. Classes — Python 3.10.2 documentation 9. Classes Classes provide a means of bundling data and functionality together. Creating a new class creates a new type of object, allowing new instances of that type to be made. Each class instance can have attributes attached to it for maintaining its st docs.python.org global : 이 키워드로 변수를 선언하면 전역변수로 간주된다... 2022. 1. 21.
[프로그래머스][완전탐색] 카펫 https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 brown+yellow = w*h yellow = (w-2)*(h-2) 위 방정식을 풀면 w, h를 구할 수 있다. 허나 이렇게 풀면 완전 수학문제다 나는 완전탐색 느낌이 나도록 문제룰 풀어보았다. total 셀의 개수는 brown + yellow 이다. yellow = (w-2)*(h-2) 이다. h를 3부터 시작해서 차례로 오름차순으로 증가해 나간다 total이 h로 나눠지는지 확인한다... 2021. 4. 15.
파이썬 순열/조합 permutation, combination 사용하기 from itertools import permutations, combinations a = [1,2,3,4,5] list(permutations(a,2)) 결과 : [(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)] list(combinations(a,3)) 결과 : [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)] 고등학교때 nPr nCr 을 기억하고 있을 것이다. n개에서 r개를 선택하여 나열하는 경우의수 n개에서 r개를 선택하는 경우의 수 permutations과 combinations는 위 두개를 계산해주는 함수이다. permitations(인.. 2021. 4. 15.
[프로그래머스][완전탐색] 소수 찾기 programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 해설 내가 본래 c++이 주 언어여서 그런지 완전 c++ 스타일로 풀었다. 문제 해결은 간단하다 permutation로직으로 모든 케이스를 생성하고 해당 케이스가 소수인지 아닌지 판별한다 여기서 permutation은 파이썬 내장 함수를 사용해도 되지만 기본적으로 어떻게 하는지 적어보면 for i in range(len(numbers)): if visit[i]:.. 2021. 4. 15.
[프로그래머스][동적계획법] 도둑질 https://school.programmers.co.kr/learn/courses/30/lessons/42897 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 아이디어 어차피 돈은 양수이기에 두칸씩 띄어서 선택하면 장땡이다 첫번째 집과 마지막집은 붙어있기에 동시에 선택을 못한다 둘중하나 선택을 안하면 직선처럼 문제를 생각할 수 있다 두케이스중 큰값을 골라준다 def solution(money): answer = 0 # 마지막집을 선택하지 않은경우 dp = [0] * len(money) dp[0] = money[0] dp[1] = max(mon.. 2021. 4. 14.
[프로그래머스][동적계획법] 등굣길 programmers.co.kr/learn/courses/30/lessons/42898?language=python3 코딩테스트 연습 - 등굣길 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = programmers.co.kr 문재해결 방법 dp[0][0] = 1로 둔다 한 지점에서 위쪽과 왼쪽의 dp값을 더한다. set을 이용해서 웅덩이는 무시한다. 문제에서 1,000,000,007 로 나눠주라는거 주의하자 def solution(m, n, puddles): answer = 0 dp = [[0 for _ in range(m)] for _ in range(n.. 2021. 4. 13.
[프로그래머스][동적계획법] 정수 삼각형 programmers.co.kr/learn/courses/30/lessons/43105 코딩테스트 연습 - 정수 삼각형 [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30 programmers.co.kr 간단한 dp문제. 숫자 하나 기준으로 윗줄의 left right 숫자를 더하며 가장 큰것을 선택해 나가면 된다. 다른사람 풀이보니 한줄에 풀었던데 그런건 어케하는건지.. def solution(triangle): answer = 0 length = len(triangle) dp = [ [0] * i for i in range(1, length + 1)] dp[0][0] = triangle[0][0] for i in range(1, length): fo.. 2021. 4. 13.
[프로그래머스][탐욕법] 큰 수 만들기 programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 그리디 + 스택문제이다. 문제해결 아이디어 : 앞자리에서부터 세어나가며 내림차순이 되도록 만든다 숫자를 스택에 하나씩 쌓아 올려가되 내림차순으로 만든다. 즉 스택을 쌓다가 스택 가장 윗자리 숫자보다 큰 숫자가 나오면 스택을 내림차순이 될 때 까지 pop 해준다. k개를 pop해주었으면 나머지 숫자는 그대로 내비둔다. pop한 갯수가 k보다 부족하면 부족한 수 만큼 뒤에서 덜어준다.(내림차순이므로 뒤에 숫자를 빼는게 유리) def solution(number, k): answer = '' q = [] popcnt = 0 for num in number: .. 2021. 4. 2.
[프로그래머스][탐욕법] 조이스틱 programmers.co.kr/learn/courses/30/lessons/42860 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 해결방법 글자를 바꿔야할 문자중 현재커서에 가장 가까운 곳을 선택하며 글자를 바꿔나가면 된다. 가장 가까운곳을 구하는 방법은 heapq를 이용하였다. import heapq def solution(name): length = len(name) cursor = 0 answer = 0 currentName = ['A'] * length while current.. 2021. 4. 2.
파이썬 문자 아스키코드 얻는법 >>> ord('A') 65 >>> chr(65) 'A' ord() : 문자를 아스키코드로 반환해준다 chr() : 숫자에 맞는 문자를 반환해준다. 2021. 4. 2.
[프로그래머스][탐욕법(그리디)] 체육복 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.
그리디 알고리즘의 조건 탐욕스러운 선택 조건 앞의 선택이 이후 선택에 영향을 주지 않아야 한다. 최적부분 구조 조건 문제에 대한 해결방법이 문제의 부분에 대해서도 해결방법이 되야 한다 2021. 4. 1.
[프로그래머스][힙] 디스크 컨트롤러 programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 programmers.co.kr 해설 대기하는 작업들중 수행시간이 가장 작은작업을 먼저 처리해야 한다. 현재 작업중인 작업이 [0, 3] 라고 하자 대기 작업 [1, 9], [2, 6] 이 있다고 하자 저기서 대기작업들의 걸리는 시간을 생각해보면 간단하다. 만약 대기작업이 2개가 있다고 치자. 각각 걸리는 작업의 시간은 앞에오는놈 : (현재 작업중인 작업의 종료시간 - 앞에오는놈의 시작시간) + 앞에오.. 2021. 3. 31.
[프로그래머스][힙(heap)] 더 맵게 programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 해설 시키는대로 heap을 이용해 풀면 된다. 한번 스코빌 지수를 계산할때마다 전체 원소의 수가 하나씩 줄어드는데 이때 heap의 사이즈가 0이 되면 바로 return -1을 해주면 된다. import heapq def solution(scoville, K): answer = 0 q = [] for i in scoville: heapq.heappush(q,i) w.. 2021. 3. 25.
[프로그래머스][정렬] H-Index 해설 문제를 보면 x번 -> 세로축 x편 -> 가로축 이라고 생각 할 수 있다. 풀이방법 내림차순으로 정렬한다 가로세로가 h인 정사각형을 떠올리고 정사각형의 한 변의 길이가 가장 최대일때를 계산한다. def solution(citations): citations.sort(reverse=True) length = len(citations) answer = 0 for i in range(length): if citations[i] < i+1: break else: answer = i+1 return answer 다른사람 풀이를 보니 아래와 같이 개쩌는 풀이를 발견했다. 아이디어는 똑같은데 enumerate를 이용한게 참으로 멋있구만. def solution(citations): citations.sort(r.. 2021. 3. 25.
[프로그래머스][정렬] 가장 큰 수 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.
반응형