본문 바로가기

728x90

python

(22)
[Python] dictionary 타입에서 default 값 가져오기 파이썬에서 사용하는 데이터 타입 중에는 "dictionary(딕셔너리)"라는 데이터 타입이 있습니다. 우리가 사전을 볼 때 단어를 찾으면 단어의 의미가 사전에 적혀있는 것과 동일한 형태의 데이터 구조라고 생각하면 됩니다. 다음은 과일이라는 key값을 찾아가면 가격이라는 value를 담고 있는 딕셔너리의 예제입니다. fruits = {"apple" : 1000, "banana" : 1500, "strawberry" : 500} 이번 글에서는 딕셔너리의 default 값에 대하여 간단하게 정리하겠습니다! 딕셔너리를 사용하여 코드를 짜다보면 종종 딕셔너리에서 값을 가져올 때 해당하는 키 값이 딕셔너리에 없는 경우가 있습니다. 없는 키에 접근을 하면 당연히 value를 불러 올 수 없습니다. 그렇다면 딕셔너리에..
[BOJ] 7576. 토마토 (Python) 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 오랜만에 보는 토마토 문제~! 정말 대표적인 BFS 문제라고 할 수 있다. from collections import deque def solution() : M, N = map(int, input().split()) dxy = [(0, 1), (0, -1), (1, 0), (-1, 0)] # 이동 방향 q = deque([]) tomatoes = [] for row in range(N) : tomato = list(map(int, input()..
[Programmers] 타겟 넘버 (Python) 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 programmers.co.kr 예전에 풀었던 BFS / DFS를 오랜만에 다시 풀어봤다! 주어진 숫자로 타겟 넘버를 만드는 방법이 몇가지 있는지 세보는 문제이다. 이때 주어진 숫자의 순서는 바꿀 수가 없다! 방법은 간단하다. 앞에서부터 순서대로 더하거나 빼는 케이스를 해보고, 타겟 넘버가 되는 케이스를 세어주면 된다. 1) BFS 풀이 def bfs(start) : answer = 0 q = deque([]) q.append((numbers[start], start))..
[Programmers] 2019 카카오 개발자 겨울 인턴십 - 튜플 (Python) 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 문자열 다루는 문제! 집합 길이별로 정렬해서 새로 추가 된 숫자를 순서대로 정답 리스트에 넣어주면 된다!! def solution(s): answer = [] s = s[1:-1] # 대괄호 제거 s = ''.join(s.split('{')).split('}')[:-1] # 집합 분리 set_dict = dict() # 길이 별 집합 저장 for i in s : if i[0] == "," : i = i[1:] ..
[Programmers] 큰 수 만들기 (Python) 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 오랫동안 못 풀었던 큰 수 만들기 문제! 오랜만에 도전했더니 생각보단(?) 금방 해결해서 기분이 좋다! 그리디 = 매 순간 최선의 선택을 하는 문제! 라는 것에 집중하면 문제 해결방법을 금방 생각해낼 수 있다. 가장 큰 수를 만들기 위해서 매 순간 할 수 있는 가장 최선의 선택은 무엇일까? 큰 수의 조건은 무엇인가!? 일단 큰 수가 되려면 무조건 맨 앞자리 숫자가 가장 커야한다. 따라서 앞에서부터 비교했을 때 현재 자릿수 숫자 < 다음 자릿 수 숫자 이면 현재 자릿수의 숫자를 제거하는 것이 바람직하다는 것! 또한 제거하고나서 매번 처음부터 다시 비교하면 시간초과가 나므로 제거한 숫자 전 바로 이전 자릿수부터 다시 비교해야한다. 이전 자릿수..
[Programmers] 이진 변환 반복하기 (Python) 코딩테스트 연습 - 이진 변환 반복하기 programmers.co.kr 주어진 이진 숫자에서 0을 제거하고, 제거한 숫자의 길이를 다시 이진 변환하고.. 숫자가 1이 될 때까지 이 과정을 반복하는 문제이다! 1이 될 때까지 몇 개의 0을 제거했고, 몇 단계를 거쳤는지 리턴해주면 끝! def solution(s): answer = [] cnt = 0 # 제거한 0의 개수 step = 0 # 회차 while s != "1" : step += 1 new_s = len(''.join(s.split("0"))) cnt += len(s) - new_s s = "" while new_s != 1 and new_s != 0 : s = str(new_s % 2) + s new_s //= 2 s = str(new_s) +..
[Programmers] 스킬트리 (Python) 코딩테스트 연습 - 스킬트리 programmers.co.kr 스킬 트리에서 선행 스킬 조건을 제대로 만족한 스킬트리의 개수를 찾는 문제! 오랜만에 게임이 하고 싶어지는 문제였다ㅋㅋ 처음에는 선행 스킬 조건을 Parents 테이블로 찾아야 하나 했는데 생각해보니 단계 순서를 정확하게 따르지 않으면 무조건 틀리기 때문에 그냥 순서를 지켰느냐만 확인하면 되는 문제였다. 1. 각 스킬 레벨 정리 주어진 선행 스킬 순서대로 딕셔너리 형태로 0, 1, 2, ... 순으로 레벨을 매겨주었다. 2. 각 스킬 트리하나씩 살펴보며 선행 스킬 지켰는가 확인 i) 만약 선행스킬이 없는 스킬이라면 순서가 상관없으니 확인할 필요가 없음 ii) 선행 스킬이 있다면(스킬 딕셔너리에 존재한다면) 내가 현재 배울 수 있는 스킬인지 확인..
[Programmers] 피로도 (Python) 코딩테스트 연습 - 피로도 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던 programmers.co.kr 던전의 개수가 8개밖에 되지 않아 permutations로 간단하게 풀었다. from itertools import permutations def solution(k, dungeons): answer = -1 n = len(dungeons) # 던전 갯수 for perm in list(permutations(range(0, n), n)) : cnt = 0 now_k = k for i in perm : if now_k >= dungeons[i][0] : n..

728x90