목록전체 글 (146)
개발자 블로그
QuerySet을 잘사용하는법 QuerySet은 1개의 Query 와 0~N개의 QuerySet으로 이루어져있다. 수행하고자 하는 SQL을 먼저떠올리지말고 가져오고자하는 데이터 리스트를 먼저 떠올리자 QuerySet이 제공하는 기초적인 SQL구조를 기억하자 이 구조를 벗어난다면 그건 RawQuerySet으로 풀자 (Queryset이 제공하는기본적인 SQL구조 4-2 참고) ORM으로 복잡한 SQL을 구현했다고 ORM을 잘쓰는 것이 아니다. 어떤 로직을 작성하는데 단조로운 SQL작업을 줄여주고 Object와 Relational을 Mapping해준다는 ORM의 장점을 얻을수 없다면 그때는 NativeSQL을 사용하자 NativeSQL(속칭 날쿼리) 사용을 망설이지말아라 특히 SQL성능이 중요한 경우라면 , ..
문제 설명 더보기 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, "abcabcdede"와 같은 문자열은 전혀 압축되지 않습니다. "어피치"는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단..

문제 설명 더보기 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. 제한 사항 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다. 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다. 입출력 예 sreturn "try hello world" "TrY HeLlO WoRlD" 입출력 예 설명 "try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 ..

문제 설명 더보기 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 sta..

문제 설명 더보기 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight" 234567 → "23four5six7" 10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요. 참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다. 숫자영단어 0 zero 1 one 2 two 3 three 4 four 5 five 6 six..
문제 설명 더보기 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규칙에 맞는 아이디를 추천해주는 프로그램을 개발하는 것입니다. 다음은 카카오 아이디의 규칙입니다. 아이디의 길이는 3자 이상 15자 이하여야 합니다. 아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다. 단, 마침표(.)는 처음과 끝에 사용할 수 없으며 또한 연속으로 사용할 수 없습니다. "네오"는 다음과 같이 7단계의 순차적인 처리 과정을 통해 신규 유저가 입력..

1. 자료형 분류 파이썬이 제공하는 다음과 같은 자료형들을 가리켜 '시퀀스 타입(sequence type)'이라 한다. 문자열의 경우 텍스트 시퀀스 타입이라 하는데, 이것도 뭐 시퀀스 타입의 일종이다. 리스트 list 클래스의 객체 튜플 tuple 클래스의 객체 레인지 range 클래스의 객체 문자열 str 클래스의 객체 이들에겐 저장된 값의 순서 정보(위치 정보)가 존재하다는 특징이 있다. 레인지의 경우에는 시작과 끝값의 범위를 저장하지만 시작과 끝이라는 순서가 존재한다. 여튼 저장된 값의 순서가 존재한다는 것이 시퀀스(연속적인)타입의 특징이다. 다음 두 연산은 시퀀스 타입의 특징을 기반으로 진행되는 연산이다. 인덱싱 연산 s[0], s[1], s[2] 특정하는 값 하나를 참조하는 연산 슬라이싱 연산 ..

우연치 않게 오늘 알고리즘 문제를 풀다가 딕셔너리로 접근하여 푸는 문제를 만났다. 그래서 더욱 반갑기도 했지만, 막상 문제에 적용하려 하니 잘 안되기도 했다. 역시 많이 접해보고 사용해봐야 익숙해질 것 같다. 그래서 따로 블로그를 통해 위 내용에 대해 더 자세하게 작성해보려한다! 1) 키가 존재할 때와 존재하지 않을 때 키가 존재할 때와 하지 않을 때, 대입의 연산(=)의 경우에는 예외 없이 잘 값의 수정 또는 생성으로 잘 이어진다. 하지만 문제는 참조(ex. +=)를 하고 싶을 때 일어난다. 예를 들어 해당 키가 존재하지 않는 상황에서 값을 참조하려고 할 때, 예외가 발생한다. 예시를 들어보자! 이러한 경우 if와 else로 키가 존재할 때와 존재하지 않을 때 구분하여 처리할 수 있다. 하지만 더 나은..
문제 설명 더보기 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다. 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다. 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다. k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다. 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다. 다음은 전체 유저 목록이 ["muzi", "frodo", "apeach", "neo"]이고, k..

dict 다양한 생성 방법 위 코드를 보면 다양한 방법으로 딕셔너리를 생성할 수 있는 것을 확인할 수 있다. 원래 딕셔너리와 같은 성격의 저장소는 저장 순서를 보장하지 않았지만, 버전 3.7부터 파이썬은 저장순서를 보장하고 있다고 한다. d4의 경우 zip 함수를 사용하여 딕셔너리를 만들었는데, zip함수는 순차적으로 값을 뽑아 튜플 형태로 반환해주는 함수이다. 안에 들어가는 객체(리스트, 문자열, 튜플) iterable 객체가 들어가는 것을 볼 수 있다. 여튼 zip함수는 같은 위치에 있는 값들을 조합해서 튜플을 만들어 낸다. 그리고 셋 이상의 값들을 조합하는 것도 가능하다! 딕셔너리 루핑 테크닉 dict.keys() # 딕셔너리의 키들만 참조하고자 할 때 dict.values() # 딕셔너리의 값들만..