목록전체 글 (142)
개발자 블로그
문제 설명 더보기 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한 조건 number는 2자리 이상, 1,000,000자리 이하인 숫자입니다. k는 1 이상 number의 자릿수 미만인 자연수입니다. 입출력 예numberkreturn "1924" 2 "94"..
문제 설명 더보기 N개의 최소공배수 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. 제한 사항 arr은 길이 1이상, 15이하인 배열입니다. arr의 원소는 100 이하인 자연수입니다. 입출력 예arrresult [2,6,8,14] 168 [1,2,3] 6 나의 풀이 def gcd(a, b): while b > 0: a, b = b, a % b re..
문제 설명 더보기 다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다. (), [], {} 는 모두 올바른 괄호 문자열입니다. 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다. 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다. 대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 ret..
문제 설명 더보기 야근 지수 회사원 Demi는 가끔은 야근을 하는데요, 야근을 하면 야근 피로도가 쌓입니다. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값입니다. Demi는 N시간 동안 야근 피로도를 최소화하도록 일할 겁니다.Demi가 1시간 동안 작업량 1만큼을 처리할 수 있다고 할 때, 퇴근까지 남은 N 시간과 각 일에 대한 작업량 works에 대해 야근 피로도를 최소화한 값을 리턴하는 함수 solution을 완성해주세요. 제한 사항 works는 길이 1 이상, 20,000 이하인 배열입니다. works의 원소는 50000 이하인 자연수입니다. n은 1,000,000 이하인 자연수입니다. 입출력 예worksnresult [4, 3, 3] 4 12 [2, 1, 2] 1 6 ..
문제 설명 더보기 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. 예를 들어 begin이 "hit", target가 "cog", words가 ["hot","dot","dog","lot","log","cog"]라면 "hit" -> "hot" -> "dot" -> "dog" -> "cog"와 같이 4단계를 거쳐 변환할 수 있습니다. 두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 targ..
문제 설명 더보기 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 제한사항 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다. 각 컴퓨터는 0부터 n-1인 정수로 표현합니다. i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 comput..
개발을 하다보면 import를 사용할 일이 정말 많다. 해당 파일에서 다른 파일에 있는 객체를 가져와 사용하고 싶을 때, 물론 사용할 객체를 한 파일에 있으면 import를 사용할 일은 없다. 하지만 서비스와 비즈니스 모듈을 나누고 또 테스트를 사용하고 등등 여러가지 이유로 우리는 여러 파일을 나누고 불러와 사용하는 일이 빈번하다. 그럴 때 의도하지 않는 것도 실행이 될 수도 있다. 해당 파일에 필요한 것만 가져와 사용하고 싶은데... 그럴 때 __name__ 이란 변수의 성질을 잘 알고 사용한다면 우리는 이러한 불편함을 해결할 수 있다. __name__ 란? __name__은 파이썬 파일을 실행하면 자동으로 생성이 되는 변수이다. 그렇다면 이 변수에는 뭐가 참조되고 있을까... 바로 '__main__'..
클래스 메소드와 static 메소드를 이해하기 전에 클래스 변수와 인스턴스 변수에 대한 이해를 하고 넘어가자! 클래스 변수: 클래스 내부의 변수로 self(객체)로 전달받지 않는다.(클래스에 속한 변수) 클래스 내부에 직접적으로 연결되어 있고, self를 인자로 받지 않고 변수 명 그대로 쓰인다. 인스턴스 변수: 객체 안에 있는 변수로 self(객체)에 의해 전달받은 변수.(객체에 속한 변수) 보통 클래스 안의 메소드 내부에 있음. ex) self.name = 'hayongwoon' 둘의 차이는 실제로 값에 접근을 할 때에도 있다. 클래스 변수의 경우 '클래스이름.변수명' 으로 접근 가능하고, 객체를 생성해서 '객체.변수명'으로도 접근이 가능 하지만, 인스턴스 변수의 경우 객체를 만들어야만 객체이름으로 ..
지난 글에서 네스티드 함수와 클로져 테크닉을 공부했다. 그래서 데코레이터를 기술을 더 쉽게 이해할 수 있었다. 데코레이터는 단순히 함수 위에 '@데코네임'을 붙여 붙인 함수에 대해 부가적인 기능이나 제한을 뒀을 때 사용하곤 했다. 기술적인 부분을 살펴보면 우선 데코레이터 아래 들어가는 함수가 데코레이터 함수의 네스티드 함수가 된다. 즉, 데코레이터 아래 함수를 인자로 받아 함수를 반환하는 기술이 데코레이터의 원리이다. @deco는 아래 함수를 데코레이터 deco 함수에 통과시켜라! 라고하는 말, 두 이미지는 같은 결과를 내지만 더욱 간결하다!
함수를 만들어서 반환하는 함수, 파이썬은 모든 것이 객체이기에 함수를 반환하는 함수를 만들 수 있다. 따라서 함수 안에 정의 된 함수를 네스티드 함수라고 한다. 여기서 m이라는 변수를 잘 살펴보자. f1이라는 객체를 만들 때, m=2라는 변수에 참조했다. 그리고 다시 f1(7)이라고 했는데, 네스티드 함수의 안을 보면 변수 m에 대해 따로 정의한 것이 없다. 그런데 네스티드 함수에서 어떻게 밖에 있는 변수를 참조해서 가져올까? 바로 클로저라는 테크닉을 사용한다고 한다. 정리 네스티드 함수 - 함수 안에서 정의 된 함수 클로저 - 네스티드 함수 밖에서 정의 된 변수를 참조하여 사용할 때 쓰는 기술 보다시피 다소 복잡한 곳에 따로 저장을 해둔 것을 확인 할 수 있다. 클로져라는 변수의 0번 째 인덱스 안의 ..