분류 전체보기 802

서울에서 김서방 찾기

문제 설명 String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다. 제한 사항 seoul은 길이 1 이상, 1000 이하인 배열입니다. seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다. "Kim"은 반드시 seoul 안에 포함되어 있습니다. 해결 방법 1. seoul 리스트 안에 "Kim" 문자열의 인덱스를 찾는다. 2. 지정된 문장안에 인덱스를 포함시켜 반환한다. def solution(seoul): i = seoul.index("Kim") answer = f"김서방은 {i}에 있다" return ..

DRF에서 라우터는 왜 사용하는가?

목표 수정과 삭제기능 구현하기 라우터는 왜 사용하는가? 목적 DRF로 간단한 CRUD를 구현하여 기본 구조를 익히고자 함 DRF에서 router를 왜 사용하고 어떻게 사용하는지 이해하기 위함 결과 viewset과 serializer를 이용하여 수정과 삭제 기능 구현 완료 (사실상 어제 완료가 된 것이었으나 uri에 '/'의 위치가 잘못되어 작동하지 않았던 것임) router를 사용하는 이유 viewset과 연계하여 url의 하드코딩을 막을 수 있다. as_view를 통해 각 request method마다 api를 연결시켜주었다면 router는 이를 알아서 연결해줌. message_list = MessageViewSet.as_view({ 'get': 'list', 'post': 'create', }) me..

Log/Today 2022.01.29

수박수박수박수박수박수?

문제 설명 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 제한 사항 n은 길이 10,000이하인 자연수입니다. 해결 방법 1. n을 2로 나누고 '수박'을 곱한다. 2. n이 2로 나누어 떨어지는지 불린 값으로 확인한다. 3. 딕셔너리를 활용해 불린 키에 해당하는 값을 찾는다. 4. True일 경우 2로 나누어 떨어지므로 '수박'을 곱한 문자열을 그대로 반환한다. 5. False일 경우 나머지가 1이 남은므로 '수박'을 곱한 문자열에 '수'을 덧붙여 반환한다. def solution(n): text = n // 2 * '수박' bool_dict = ..

DRF를 사용하여 간단한 CRUD 구현해보기

목표 DRF를 사용하여 간단한 CRUD 구현해보기 viewset 이용하기 serializer 이용하기 목적 DRF 기본기능 익히기 결과 viewset과 serializer를 이용하여 읽기(get), 쓰기(post) 기능 구현 수정(update)과 삭제(delete) 기능은 구현하지 못함 # serializers.py class MessageSerializer(serializers.ModelSerializer): class Meta: model = Message fields = "__all__" # views.py class MessageViewSet(viewsets.ModelViewSet): queryset = Message.objects.all() serializer_class = MessageSeri..

Log/Today 2022.01.28

함수를 어떻게 짜죠?

제목 : 클린 코드 저자 : 로버트 C. 마틴 범위 : 3장 함수 기억하고 싶은 것 작게 만들어라! 함수를 만드는 첫째 규칙은 '작게!'다. 20줄도 길다. 들여 쓰기 수준은 1단이나 2단을 넘어서면 안 된다. 함수는 한 가지를 해야 한다. 그 한 가지를 잘해야 한다. 그 한 가지만을 해야 한다. 한 가지란 무엇인가? 지정된 함수 '이름' 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다. 확인하는 방법, 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다. 함수 당 추상화 수준은 하나로! 근본 개념 세부 사항 ex) getHtml() .append("\n") 추상화 수준을 일관되게 적용할 것 위에서 아래로 추상화 수준이 낮은 함수가 위치한..

DRF Tutorial 끝내기

목표 Django REST framework Tutorial 끝내기 목적 Django로 취업을 하기 위해서는 DRF를 공부해야함 DRF Tutorial을 통해 전반적인 기능을 눈에 익혀야함 결과 DRF 공식페이지를 통해 Tutorial 1~6번 까지 모두 완료하였음 해당 코드는 모두 깃헙에 push 하였음 serialization과 viewset 등 아직은 추상적이고 어려운 개념들이라 정확하게 이해되지 않음 앞으로 당장 내일 '술고' 프로젝트를 리펙토링하면서 DRF 적용해보기 viewset을 이용하여 DB데이터 반환해보기 레퍼런스 DRF 공식 홈페이지

Log/Today 2022.01.27

시저 암호

문제 설명 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요. 제한 사항 공백은 아무리 밀어도 공백입니다. s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다. s의 길이는 8000이하입니다. n은 1 이상, 25이하인 자연수입니다. 해결 방법 1. s문자열을 반복하여 나눈다. 2. 문자중에 대문자와 소문자가 있는 확인 후 분기한다. 3. 알파벳 인덱스를 확인하고 거기에 n을 더하고 알파벨 전체 길이를 뺀다. 4. ..

약수의 합

문제 설명 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. (12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.) 제한 사항 n은 0 이상 3000이하인 정수입니다. 해결 방법 1. n의 절반에 해당되는 수 만큼 반복을 돌린다. 2. n과 나누어 떨어지는 수들을 합한다. 3. 마지막으로 n을 합한다. (n의 절반을 나눠 반복하였으므로 약수 중에 하나인 n을 추가로 더해주어야 함) def solution(n): answer = sum([i for i in range(1, n // 2 + 1) if n % i == 0]) + n return answer 출처: 프로그래머스 코딩 테스트 연습, https://programmers...

의미 있는 이름

제목 : 클린 코드 저자 : 로버트 C. 마틴 범위 : 2장 의미 있는 이름 기억하고 싶은 것 그릇된 정보를 피하라 서로 흡사한 이름을 사용하지 않도록 주의한다. 의미 있게 구분하라 (읽는 사람이 차이를 알도록 이름을 지어라) 연속적인 숫자를 덧붙인 이름은 의도적인 이름과 정반대다. 요지는 zork라는 변수가 있다는 이유만으로 theZork라 이름 지어서는 안 된다는 말이다. 주의 : info, data, variable, table 등 발음하기 쉬운 이름을 사용하라 검색하기 쉬운 이름을 사용하라 긴 이름이 짧은 이름보다 좋다. 검색하기 쉬운 이름이 상수보다 좋다. 이름 길이는 범위(스코프) 크기에 비례해야 한다. 전역변수나 상수는 검색하기 쉬운 이름이 바람직하다. 자신의 기억력을 자랑하지 마라 문자 하..

이상한 문자 만들기

문제 설명 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. 제한 사항 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다. 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다. 해결 방법 1. 문자열을 단어로 쪼갠다. 2. 단어를 반복하며 홀수는 대문자, 짝수는 소문자로 바꾼다. 3. 단어를 공백과 함께 다시 합친다. def solution(s): answer = '' words = s.split(' ') for word in words: for i, s ..