파이썬 코딩테스트 21

백준 28279 - 덱 2

처음 든 생각 - 그냥 큐의 메서드만 잘 활용하고 출력값만 실수하지 말자 - 아 input 말고 sys.stdin.readline 쓰자 -> 예전에 로직은 다 맞았는데 input 때문에 시간 초과 났던 문제가 있어서 ptsd가 왔다. 나의 답 import sys from collections import deque N = int(sys.stdin.readline()) q= deque() for _ in range(N): cmd = list(map(int, sys.stdin.readline().split())) n = cmd[0] if n == 1: q.appendleft(cmd[1]) elif n == 2: q.append(cmd[1]) elif n==3: if len(q) == 0: print(-1) ..

백준 4779 - 칸토어 집합

처음 든 생각 - 재귀로 3 그룹씩 쪼개가면서 풀면 되겠다. - 근데 리턴 조건을 어떻게 설정해야 되지...? 나의 답 def cantor(n): if n == 1: return "-" else: left = cantor(n//3) center = " " * (n //3) return left + center + left while True: try: N = int(input()) result = cantor(3**N) print(result) except: break 3개의 그룹으로 쪼개고 왼쪽 오른쪽은 또 칸토어한 결과를 더해주는 것이다. N = 2를 예시로 들면 cantor(3) | " " 3개 | cantor(3) cantor(1) " " cantor(1) | " " 3개 | cantor(1) "..

python 코딩테스트 - 프로그래머스 다음 큰 숫자

처음 든 생각 - 하나씩 키워가면서 일일이 탐색을 해야겠다 - 이진수로 바꾸는 것은 저번에 배운 bin 함수를 활용해서 해봐야지 나의 답 def solution(n): answer = 0 bn = bin(n) cnt = bn[2:].count("1") while True: n+=1 if bin(n)[2:].count("1") == cnt: return n 주어진 수가 가진 1의 개수를 cnt 변수에 담아놓고 반복문을 통해서 알맞은 수를 찾아가는 과정으로 구현한 것이다. 찾을 때까지 반복문을 돌게 하기 위하여 while True를 사용했고 찾으면 바로 리턴을 하면서 solution 함수를 끝내는 방식으로 구현하였다. 다른 사람들의 풀이도 변수명만 다를 뿐 사용한 함수도 똑같아서 따로 참고해볼 사항은 없었다.

python 코딩테스트 - 프로그래머스 이진 변환 반복하기

처음 든 생각 - 문제에 나온 그대로 차근차근 단계를 밟아나가자 (1) 0 제거 (2) 남은 1의 개수만큼 이진수로 변환 (3) (1)~(2) 과정 반복 - 0을 제거할 때 하나씩 count하면 될 거고 - 이진수 변환하는 건 혹시 라이브러리나 내장함수가 있을까? -> 아니면 재귀로 해서 풀어야된다 나의 답 def solution(s): zeros = 0 count = 0 tmp = 0 while len(s) > 1: for i in s: if i == "0": zeros+=1 else: tmp += 1 s = format(tmp,'b') tmp = 0 count += 1 return [count , zeros] 0의 개수, 이진변환 횟수, 1의 갯수를 담을 3개의 변수를 선언하였다. 반복문은 while..

python 코딩테스트 - 프로그래머스 최솟값 만들기

처음 든 생각 - 순차적으로 곱해주는데 곱하는 수들의 조합을 어떻게 해줘야될까 - 가장 큰 놈이랑 가장 작은 놈이랑 곱해주고 이런 식으로 큰 수 x 작은 수 조합으로 계속 곱해야겠네 나의 답 def solution(A,B): answer = 0 A = sorted(A) B = sorted(B,reverse=True) for i in range(len(A)): answer += A[i] * B[i] return answer 하나의 배열은 내림차순, 다른 배열은 오름차순으로 정렬을 하였다. 그 다음 반복문을 돌면서 같은 인덱스를 참조하며 곱한 값을 더해준다. 그리디의 가장 일반적인 케이스라고 생각된다. 큰 수를 가장 적게 더해주는 방식으로 차근차근 나아가면 되는 방식으로 해결되는 문제였다. 다른 사람의 답 ..

python 코딩테스트 - 2022 카카오 인턴 기출 2번

https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 든 생각 - 대놓고 큐 쓰라고 줬고 popleft랑 append를 쓰면 되겠다. 이 함수들은 시간복잡도 O(1)이니깐 - 서로 대소 비교를 하면서 큰 놈에서 작은 놈으로 하나씩 옮겨가주면서 같은지 아닌지 계속 확인하면 되겠다. 나의 답 from collections import deque def solution(queue1, queue2): q1 = deque(queue1) q2 = deq..

python 코딩 테스트 - 카카오 2022 인턴 기출 1번

https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제가 매우 길어 링크를 첨부했다. 처음 든 생각 - 성격 유형 점수랑 성격 유형이 4가지로 고정이니깐 같은 인덱스로 조작해야겠다. - 앞에 오는 게 뭔지 관리를 해줘야겠다. - 각 지표별 성격유형을 점수를 매긴 후 정렬을 해주고 합쳐줘야겠다. - 같은 점수를 나타내더라도 알파벳 순서로 정렬 되므로 굳이 추가적인 작업은 필요 없겠다. 나의 답 def solution(survey, choices)..

python 코딩테스트 - 프로그래머스 구명보트

처음 든 생각 - 정렬을 한 뒤에 큐나 스택 자료구조를 사용하면 되겠다. 자료구조 선택 이후 그 다음 계산로직만 구현하면 된다고 판단해서 바로 코드를 작성했다. 나의 답 from collections import deque def solution(people, limit): answer = 0 q= deque(sorted(people)) while q: if len(q) == 1: q.popleft() answer += 1 break if q[0] + q[-1] > limit: q.pop() answer += 1 else: q.popleft() q.pop() answer += 1 return answer 큐 자료구조를 사용했고 길이가 1인 특수 케이스에 대해서 따로 처리를 한 후 최솟값과 최댓값을 짝을 ..

python 코딩테스트 - 프로그래머스 전력망을 둘로 나누기

처음 든 생각 - 이건 무조건 DFS를 써야된다. - 하나가 끊어진 모든 경우를 탐색하면서 DFS를 해서 차이를 구하면 되겠다. 나의 답 def solution(n, wires): answer = n def dfs(g,v,s): v[s] = True for k in g[s]: if v[k] == False: dfs(g,v,k) for i in range(len(wires)): a,b = wires[i] wires[i] = [0,0] g = [[] for _ in range(n+1)] v = [False for _ in range(n+1)] for j in range(n-1): x,y = wires[j] if x > 0: if y not in g[x]: g[x].append(y) if x not in g[..

python 코딩테스트 - 프로그래머스 할인 행사

처음 든 생각 - 먼저 want와 number를 통해서 원하는 품목과 개수를 딕셔너리를 만들고 나중에 비교해야겠다. - discount 리스트를 한 칸씩 옮겨가면서 슬라이싱을 한다. 크기가 원하는 총 개수랑 똑같으니깐 sliding window라고 해도 되네. - window 내에서 품목, 개수 딕셔너리를 만들고 원하는 품목 딕셔너리랑 비교하면 되겠다. 나의 답 def solution(want, number, discount): answer=0 obj = {} total = 0 for i in range(len(want)): if want[i] not in obj: total += number[i] obj[want[i]] = number[i] tmp = {} for i in range(len(discou..

728x90