목록전체 글 (146)
개발자 블로그
TDD란? Test Driven Devlopment, 테스트 주도 개발로 '테스트가 개발을 이끈다' 라는 말. 1. 그렇다면 왜? 테스트 주도 개발을 해야할까? 애자일이란에서 설명한 것과 같이 불확실성이 높을 때 ‘피드백’과 ‘협력’이 중요하다. 피드백과 협력이 중요한 이유 - 불확실성이 높을 때 ‘피드백’과 ‘협력’을 이용하면 더 좋은 결과가 나올 확률이 높아진다. - TDD도 마찬가지로 ‘피드백’과 ‘협력’을 증진시키는 것이기 때문에 불확실성이 높을 때 도움이 되는 것이다. 2. 그럼 언제 사용해야 할까? 만약 어떤 부분에 대한 코딩을 여러번 해봤고 결과가 어떻게 나올지 뻔하다면 TDD를 하지 않아도 된다. 또한 TDD를 했을 때 얻는 것이 적다면 TDD를 하지 않아도 된다. 그렇다면 TDD는 어떤 ..
Django Form의 역할 및 정의: HTML을 작성하고, 입력된 데이타의 유효성을 검증하고, 필요시에 입력된 데이타를 검증 결과와 함께 다시 표시하며, 유효한 데이타에 대해 요구되는 동작을 수행하는 것을 "올바르게 하기"위해서는 꽤 많은 노력이 필요한 작업이다. Django는 일부 과중한 작업과 반복 코드를 줄여줌으로서, 이 작업을 훨씬 쉽게 만든다! Django의 폼 처리 과정은 (모델에 대한 정보를 보여주는데 있어서) 우리가 앞선 튜토리얼에서 배웠던 것과 같은 기술을 사용한다. : 뷰는 요청을 받고, 모델로 부터 데이타를 읽는것을 포함한 요구되는 동작을 수행한다. 그런 다음, (보여줄 데이타를 포함한 context를 전달받은 템플릿으로 부터) HTML page를 생성하고 반환한다. 서버 또한 사용..
문제 설명 더보기 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. 입출력 예numbersreturn [6, 10..
문제 설명 더보기 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄..
객체가 갖는 값에 직접 접근하는 것은 쉽게 오류를 범할 수 있으므로 지양해야한다 때문에 객체의 변수에 직접 접근을 하기보다 메소드를 통해 접근하는 것이 안전하다! 하지만, 메소드를 통해 접근을 하다보면 코드가 다소 복잡해 보일 수 있다. 따라서 우리는 안전성과 간결함 이 두마리 토끼를 잡고자 프로퍼티라는 개념을 배워야한다. 메소드를 통한 객체의 값에 접근 객체의 어트리뷰트의 직접 접근을 막는 방법으로 변수 앞에 __를 붙였다. 따라서 우리느 메소드를 통해 변수에 접근을 해야한다. 아래 두개의 메소드를 통해 값을 저장 및 참조하도록 하자! 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. __속성이름 언더바(_) 두개일 때이다. 이는 실제로 속성에 직접 접근하는 못하게 막는 방법이다. 정확히는 못하게 한다기 보..