목록분류 전체보기 (142)
개발자 블로그
객체가 갖는 값에 직접 접근하는 것은 쉽게 오류를 범할 수 있으므로 지양해야한다 때문에 객체의 변수에 직접 접근을 하기보다 메소드를 통해 접근하는 것이 안전하다! 하지만, 메소드를 통해 접근을 하다보면 코드가 다소 복잡해 보일 수 있다. 따라서 우리는 안전성과 간결함 이 두마리 토끼를 잡고자 프로퍼티라는 개념을 배워야한다. 메소드를 통한 객체의 값에 접근 객체의 어트리뷰트의 직접 접근을 막는 방법으로 변수 앞에 __를 붙였다. 따라서 우리느 메소드를 통해 변수에 접근을 해야한다. 아래 두개의 메소드를 통해 값을 저장 및 참조하도록 하자! 1) getter(게터) 값 꺼내기, 이러한 성격의 메소드를 게터라한다. 2) setter(세터) 값 수정하기, 이러한 성격의 메소드를 세터라고 한다. n2의 값과 n3..
문제 설명 더보기 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다. 입출력 예..
문제 설명 더보기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = baabaa 라면 b aa baa → bb aa → aa → 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다. 제한사항 문자열의 길이 : 1,000,000이하의 자연수 문자열은 모두 소문자로 이루어져 있습..
문제 설명 더보기 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. 게임은 최종 한 명이 남을 때까지 진행됩니다. 이때, 처음 라운드에서 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자..
__slots__의 효과 앞서 블로깅을 통해 __dict__에 대해 알아보았다. 우리는 클래스를 생성할 때, 클래스 속성을 담는 딕셔너리가 생성된다는 것을 확인했다. 그리고 이러한 딕셔너리(변수를 담고 있는)를 통해 값을 수정하고 추가한다는 것도 확인했다. 하지만 해당 클래스의 객체를 생성할 때마다 딕셔너리가 생성이 되는데, 이러한 점 때문에 다소 상황에 따라 무수히 많은 객체를 생성해야 할 때 우리는 메모리상 큰 불이익을 얻을 수 있다. 객체마다 딕셔너리가 함께 생성되기 때문! (*딕셔너리는 키를 통해 값을 얻는 구조로 파이썬에서는 더 많은 정보를 갖고 있어 메모리가 적지 않다.) 메모리 상의 이득 이러한 부분을 보완하기 위해 나온 것이 __slots__이다. __slots__를 통해 변수를 등록해 두..
속성 감추기 개발을 하다보면 그리고 다른 사람과 협업을 하다 보면 바뀌지 않아야 할 값들이 바뀔 가능성은 항상 존재한다. 그래서 이를 바꾸면 안되는 것이라고 약속하는 방법과 실제로 정보를 숨김으로써 정보에 직접 접근을 막는 방법을 소개하겠다. 1. _속성이름 언더바(_) 한개 일 때이다. 이는 기능상으로는 변화는 없지만 개발자들끼리 약속한 관습이라고 할 수 있다. 속성 이름 앞에 _가 한개 존재한다면 이 값은 우리가 직접 접근을 하면 안된다! 라고 약속을 한 것과 같다. 따라서 접근은 가능하나 아래 언더바가 한개 존재한다면 이 속성은 직접 접근을 하지 않겠다고 약속한 것이다. 2. __속성이름 언더바(_) 두개일 때이다. 이는 실제로 속성에 직접 접근하는 못하게 막는 방법이다. 정확히는 못하게 한다기 보..
연산자 오버로딩이란? 클래스에서 상속시 사용되는 오버라이딩이란 개념이랑 다른 개념이다! 오버라이딩은 상속할 때 상속받은 메소드를 덮어 씌어서 새로운 메소드로 동작하도록 하는 것이고, 오버로딩은 하나의 메소드에 다양한 형태를 부여한 것이라고 말할 수 있다. 그러다 보니 오버로딩이란 개념에 대해 부정적으로 생각하는 개발자들이 많다고 한다! 왜냐면 다형성이 주는 부정적인 측면이 많기 때문! 오류가 났을 때 원인을 찾기 어렵다던가, 코드가 복잡해지는 것을 초래할 수 있다는 점에서 말이다. 미리 약속해 놓은 메소드가 호출 되도록하는 것이 연산자 오버로딩! 예를 들어 '+' -> __add__(), '-' -> __sub__() 이 호출되는 것인데, __add__()를 기존과 다르게 재정의하면, +연산자를 호출하면..
스페셜 메소드란? 객체를 불러올 때 자동으로 호출이 되는 메소드이거나 간접적(다른 경로를 통해)으로 호출할 수 있는 메소드를 가리켜 스페셜 메소드라고 한다. 대표 적으로 __init__ 메소드가 있다! 이는 객체를 생성할 때 자동으로 호출이 되는 메소드이다! 또 우리가 많이 사용하는 len, iter, str 도 사실은 원래 a.__len__(), a.__iter__(), a.__str__() 이렇게 생긴 메소드이나 우리가 알고있는 것 처럼 간접적으로 호출을 한다! 직접 스페셜 메소드를 만들어보면서 파이썬의 이해도를 높여보자! 1. iterator 객체가 되게끔 하기! 2. 1번을 성공했으면, 좀 더 수정해서 iterator 객체이면서 iterable 객체가 되게끔 해보자! *iterator 객체: ne..
문제 설명 더보기 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 개수는 2개 이상 20개 이하입니다. 각 숫자는 1 이상 50 이하인 자연수입니다. 타겟 넘버는 1 이상..
문제 설명 더보기 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 따라 1cm × 1cm의 정사각형으로 잘라 사용할 예정이었는데, 누군가가 이 종이를 대각선 꼭지점 2개를 잇는 방향으로 잘라 놓았습니다. 그러므로 현재 직사각형 종이는 크기가 같은 직각삼각형 2개로 나누어진 상태입니다. 새로운 종이를 구할 수 없는 상태이기 때문에, 이 종이에서 원래 종이의 가로, 세로 방향과 평행하게 1cm × 1cm로 잘라 사용할 수 있는 만큼만 사용하기로 하였습니다. 가로의 길이 W와 세로의 길이 H가 주어질 때, 사용할 수 있는 정사각형의 개수를 구하는 sol..