목록전체 글 (142)
개발자 블로그
map & filter map 함수와 filter 함수를 통해 반환되는 객체는 iterator 객체이자 generator 객체이다. 그리고 함수에 들어가는 2번째 인자는 iterable 객체여야한다. 이 특징이 map과 filter 함수의 장점이자 쓰는 이유가 되겠다. 그리고 두 함수의 차이는 첫번째 인자로 들어가는 함수의 리턴 값에 차이가 있다. filter 함수의 경우 첫번째로 들어가는 함수가 True or False를 반환을 하며 '걸러주는 기능'을 한다고 보면 된다. 두 함수가 iterator 객체이자 generator 객체인 이유는 iterable 객체의 값을 순차적으로 함수와 mapping하여 값을 반환하기 때문! generator객체에 대해서는 다음 시간에 더 자세히 알아보도록하자! *아! ..
문제 설명 더보기 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 제한 조건 n은 길이 10,000이하인 자연수입니다. 입출력 예 nreturn 3 "수박수" 4 "수박수박" 나의 풀이 def solution(n): answer = '' for i in range(1, n+1): if i % 2: answer += '수' else: answer += '박' return answer 개선 풀이 def solution(n): answer = '수박'*n return answer[:n] 두 풀이를 보면 처음 내가 짰던 코드가 얼마나 한심한지 모르겠다. 단순..
문제 설명 더보기 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 nreturn 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다. 입출력 예 #2 5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다. 나의 풀이 def solution(n): answer = 0 for i in range(1, n): if n % i == 0: answer += i return answer + n 개선 풀이 def solution(n): answer = 0 for i in range(1, int(n/2)+1): if n % i ..
문제 설명 더보기 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상 1000000이하의 자연수입니다. 입출력 예 nresult 10 4 5 3 입출력 예 설명 입출력 예 #1 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환 입출력 예 #2 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환 나의 풀이 def decimal(n): if n == 1: return False for i in range(2, int(n**0.5)+1): if n % i == 0: return False return True def..
iter 함수 하나 이상의 값을 저장하거나 꺼내보는 것은 빈번하고 중요한 일이다. 보편적으로 for문을 사용하여 2개 이상의 값들을 꺼내보는 작업을 했는데, 이러한 작업이 중요하기에 상황에 따라 우리는 유연하게 대처할 필요가 있다. 따라서 이번에 소개할 방법은 원하는 시기에 필요에 따라 값을 꺼낼 수 있는 iterator 객체를 설명하고자 한다. >>> ds = [1,2,3,4] >>> ir = iter(ds) >>> next(ir) 1 >>> next(ir) 2 >>> next(ir) 3 >>> next(ir) 4 >>> next(ir) Traceback (most recent call last): File ~~~~~~ next(ir) StopIteration iter 함수 코드 정리를 하면 이런대 ..
더보기 문제 설명 String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다. 제한 사항 seoul은 길이 1 이상, 1000 이하인 배열입니다. seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다. "Kim"은 반드시 seoul 안에 포함되어 있습니다. 입출력 예 seoulreturn ["Jane", "Kim"] "김서방은 1에 있다" 나의 풀이 def solution(seoul): answer = '' for idx, val in enumerate(seoul): if val == 'Kim': answer..
문제 설명 더보기 문자열 내 마음대로 정렬하기 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 제한 조건 strings는 길이 1 이상, 50이하인 배열입니다. strings의 원소는 소문자 알파벳으로 이루어져 있습니다. strings의 원소는 길이 1 이상, 100이하인 문자열입니다. 모든 strings의 원소의 길이는 n보다 큽니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 입출력 예stringsn..
두 객체의 비교와 복사 객체를 비교할 때 사용할 수 있는 두 가지 연산자 '==', 'is' 얼핏 보면 같아보이지만, 사실 이 두 가지의 차이를 분명하게 짚고 넘어가야한다. v1 == v2 변수 v1과 v2가 참조하는 객체의 내용이 같은가? v1 is v2 변수 v1과 v2가 참조하는 객체는 동일한 객체인가? 예시를 보며 설명해보자. >>> r1 = [1,2,3] >>> r2 = [1,2,3] >>> r1 is r2 #참조하는 객체가 동일 객체인가? 즉, 메모리 주소가 같니? False >>> r1 == r2 #참조하는 객체의 내용이 같은가? 즉, 두 값의 내용이 일치하니?? True 참조에 대해 앞서 블로깅을 했지만 여기서 간략히 짚고 넘어가자면, 메모리에 저장된 값에 변수명이 적힌 포스트잇을 붙이는 ..
immutable & mutable 객체가 지닌(객체에 저장된) 값이 수정이 불가능한 객체를 'immutable 객체'라고 하며, 반대로 객체가 지닌 값이 수정이 가능하면 'mutable 객체'라고 한다. 여기서 수정이 가능하다는 것은 메모리 주소가 바뀌지 않고 값을 수정할 수 있다는 것이다. 아래 예제 코드를 보며 부연 설명을 해보겠다. ##리스트## >> r = [1, 2, 3] >> id(r) #리스트의 메모리 주소 12345 >> r += [4, 5, 6] >> r >> [1, 2, 3, 4, 5, 6] >> id(r) 12345 #값이 바뀌었지만, 위 주소와 동일한 것을 확인할 수 있다. mutable 객체로는 대표적으로 리스트와 딕셔너리가 있고, immutable 객체로는 대표적으로 튜플, 문..
가비지 컬랙션이란? 레퍼런스 카운트가 0이라는 것은 아무것도 참조하고 있지 않다는 것으로 메모리 내에서 소멸 대상이 된다. 소멸 대상이 되었다고 해서 바로 소멸이 되진 않지만, 시스템에 시간적 여유가 있을 때 소멸시키게 된다. 이러한 일련의 과정들이 '가비지 컬렉션'이라고 한다. 즉, 레퍼런스 카운트가 0인 값은 소멸 대상이 되고, 시스템에 시간적 여유가 있을 때 소멸시키는 일련의 과정이다. 그렇다면 레퍼런스와 레퍼런스 카운트는 무엇인가! 파이썬에서의 변수는 빈상자에 담아둔다라는 개념보다는 '포스트 잇'과 같이 떼었다 붙였다 하는 개념이다. 즉, 참조(레퍼런스)는 이름이 쓰여진(변수명) 포스트잇을 붙인 것이라고 생각하면 된다. 따라서 레퍼런스 카운트는 객체를 참조하는 변수의 수이다. 그러면 가비지 컬랙션..