파이썬 70

for문에 else문이 딸랑?

문득 알고리즘 문제를 풀다가 해당 코드가 실행돼서 찾아봤다. answer = 0 for w in words: for c in w: if w.count(c) > chars.count(c): break else: answer += len(w) return answer for문 2개로 구성되어 있는 이중 for 문이다. 안쪽 for 문에서 break를 만난다면 안쪽 for문을 다 순회하지 않고 else 문 지점으로 오게 될텐데, else 문이 딸랑 나와도 되는지 의문이었다. 평소에는 저렇게 코드를 작성하지 않고 flag 변수를 따로 설정해서 아래와 같이 코드를 짜주곤 했다. answer = 0 for w in words: flag = True for c in w: if w.count(c) > chars.cou..

[리트코드/leetcode/python] 1814. Count Nice Pairs in an Array

해당 문제 'Count Nice Pairs in an Array'는 nums 라는에서 'nice pair'의 수를 찾는 문제입니다. 배열 안의 두 숫자 'i'와 'j' ('i' < 'j') 가 'nice pair'로 간주될 때, "nums[i] - rev(nums[i]) == nums[j] - rev(nums[j])" 이 성립해야 합니다. 여기서 rev(x)는 숫자 x의 자릿수를 반전시킨 결과입니다. 문제의 핵심은 각 숫자와 그 숫자의 반전된 형태의 차이를 이용하는 것입니다. 이 차이가 동일한 숫자들의 쌍이 'nice pair'를 형성합니다. 우선 코드부터 살펴보겠습니다. class Solution(object): def countNicePairs(self, nums): mod = 10 ** 9 + 7 ..

[백준/알고리즘/python/java] 2636번 - 치즈

문제를 먼저 해석해봅시다! 문제에서는 직사각형 모양의 판에 치즈가 표시되어 있습니다. 치즈는 1로 표시되며, 치즈가 없는 부분은 0으로 표시됩니다. 각 시간 단위마다 외부 공기와 접촉한 치즈가 녹아 없어지는데요, 이 때, 치즈의 내부에 있는 공기는 외부 공기로 간주되지 않는게 핵심입니다! 문제의 목표는 모든 치즈가 녹는 데 걸리는 시간과 마지막으로 녹기 전의 치즈 조각의 수를 찾는 것입니다. 이를 위해 BFS 알고리즘을 사용합니다. BFS는 주로 그래프의 최단 경로를 찾거나, 2차원 배열에서 특정 조건에 따라 요소를 탐색할 때 사용되는 알고리즘입니다. 이 문제에서는 BFS를 이용해 보드의 가장자리부터 시작하여 외부 공기를 탐색하고, 이를 통해 치즈의 녹는 경계를 식별합니다. 외부의 공기와 내부의 공기를 ..

list(map(int, input().strip().split())) 와 [map(int, input().strip().split())] 의 차이

문득 알고리즘 문제를 풀다가 list(map(int, input().strip().split())) 랑 [map(int, input().strip().split())] 의 차이 의 차이에 대해 궁금해서 찾아봤다. 정말 직관적으로 이해가 가능했다. 이들의 차이를 이해하려면 Python의 'map' 함수와 리스트 컴프리헨션에 대해 이해할 필요가 있다. 1. list(map(int,input().strip(),split())) input().strip(),split() 은 입력된 문자열을 공백을 기준으로 나누어 리스트로 만든다. map(int, ...) 는 이 리스트의 각 원소를 정수로 변환한다. 'map' 함수는 지정된 함수(여기서는 'int')를 리스트의 각 원소에 적용한다. list(...) 는 'map..

[백준/알고리즘/python/java] 14502번 - 연구소

이 문제는 DFS와 BFS를 결합한 흥미로운 접근 방식을 요구합니다. 이 문제의 핵심은 "가능한 한 많은 영역을 안전하게 보호하는 벽의 배치를 찾는 것" 입니다. 여기서 주목해야 할 점은 "모든 벽의 조합을 시도"해보고, "각 경우에 대해 바이러스가 얼마나 퍼지는지를 시뮬레이션"해야 한다는 것입니다. 이를 위해서 DFS를 사용해 벽을 세우고, BFS로 바이러스의 확산을 시뮬레이션합니다. 초기 접근 방법은 아래와 같습니다. from collections import deque import sys input = sys.stdin.readline # 벽을 3개를 세운다. -> 모든 경우의 수를 다 세어본다 : dfs # 바이러스를 퍼뜨려본다. # 0의 개수를 구한다. # 이 값을 max값과 계속 비교하면서 최..

[백준/알고리즘/python/java] 2852번 - NBA 농구

해당 문제는 NBA 농구 경기에서 특정 팀이 얼마나 오랫동안 리드했는지를 계산하는 문제입니다. 이 문제를 풀 때는 득점 순서, 득점 시간, 현재 리드 상태를 정확히 추적하는 것이 중요합니다. 문제를 딱 봤을 때, 뭔가 "득점이 성공된 시간 순서"대로 "1팀과 2팀 중에 어떤 팀이 넣었는지" 알아야 할 것 같습니다. 그리고, 득점을 함으로써 앞서가는지 혹은 동점이 됐는지도 체크"해야 하는 것이 중요합니다. 동점이 된 순간부터는 어느 팀도 리드하지 않는 상태가 되기 때문입니다. 이렇게, 주의할 점은 아래와 같이 요약할 수 있겠습니다. 경기 시간 처리 : 경기 시간은 "시:분" 형식으로 주어지며, 이를 총 분으로 변환해야 합니다. 상태 관리 : 경기의 현재 상태(동점, 팀1 리드, 팀2 리드)를 추적해야 합니..

[리트코드/leetcode/python] 17. Letter Combinations of a Phone Number

문제 설명부터 해보도록 하겠습니다. digits 이라는 숫자 문자열을 입력값으로 받는데요, 각 숫자 키패드에 해당하는 알파벳 문자열로 만들 수 있는 모든 문자열의 리스트를 출력하는 문제입니다. 예시 1을 보면, digits은 "23"으로 주어졌고, 각 숫자인 "2"에는 "abc"의 알파벳이, "3"에는 "def"의 알파벳이 주어져있습니다. 때문에, "23"으로 만들 수 있는 알파벳 문자열은 "ad"부터 "cf"까지 총 9가지가 될 수 있는 것을 알 수 있습니다. 여기서 캐치해야 할 점은 만들 수 있는 알파벳 문자열의 길이는 digits의 길이와 같을 수 밖에 없다는 점입니다. 흡사 순열과 조합 문제로 이해될 수 있는데, 보통 알고리즘 문제에서는 combination을 사용하거나 product, permu..

[Airflow] 파이썬 함수 파라미터 이해

함수를 실행시킬 때, 인수 없이 그냥 함수만 실행시키는 것이 아니라, 파이썬 오퍼레이터에도 함수 인수를 주는 것을 이해하려면 먼저 파이썬 함수 파라미터를 어떻게 받는지 이해가 선수되어야 합니다. 1. 파이썬 함수 인자 *args args로 들어온 값은 튜플로 저장이 됩니다. args에서 값을 꺼낼 때에는 인덱스를 이용합니다. (ex: args[0], args[1]) args라는 이름 외 다른 이름으로 받아도 됩니다.(ex: some_func(*kk):) 2. 파이썬 함수 인자 **kwargs (=keyword arguments) kwargs로 들어온 값은 딕셔너리 형태로 저장이 됩니다. kwargs에서 값을 꺼낼 때에는 get()함수를 이용합니다. (ex: name = kwargs.get('name'))..

[Airflow] @task 데코레이터 사용하기

1. 파이썬 데커레이터 Decorator는 장식하고 꾸미는 것을 의미하는데, 함수를 장식하는 것이라고 이해하시면 됩니다. 원래의 함수를 감싸서(Wrapping) 바깥에 추가 기능을 덧붙이는 방법입니다. ※ 함수를 감싼다는 것이 어떤 의미일까요? 파이썬은 함수 안에 함수를 선언하는 것이 가능하고 함수의 인자로 함수를 전달하는 것이 가능하며 함수 자체를 리턴하는 것이 가능합니다. def outer_func(target_func): # 내부 함수 정의 def inner_func(): print("target 함수 실행 전입니다.") target_func() print("target 함수 실행 후 입니다.") # 내부 함수 리턴 return inner_func 예시를 한 번 들어봅시다. 파이썬 데코레이터를 사용..

[Airflow] Docker를 통한 Airflow 설치

도커를 이용해서 airflow를 설치해보기 전에, 도커에 대해 간략하게 살펴보고 갑시다. 도커가 있기 전에는 가상화서버(Virtual Machine)라는 것을 많이 이용했습니다. 가상화 서버에는 'Hyper Visior' 라는 것이 있는데, Hyper Visor는 물리적인 서버 위에 설치되어 있는 OS가 아닌 그 OS위에 가상화 VM들을 올리고 관리할 수 있도록 해줍니다. 가상화 VM들을 여러개 세팅하고 나면, 이 가상화 VM들은 서로간에 영향을 주지않고 완전히 독립적인 환경에서 구동될 수 있는 장점이 있었습니다. 하지만, 단점이 분명 존재하는데, 바로 '오버헤드'입니다. CPU나 메모리, 디스크 같은 공간을 가상화 서버에다가 명시적으로 할당을 해줘야하기 때문에, 그만큼 호스트 OS가 사용할 수 있는 가..

반응형