전체 글

전체 글

    [Python] itertools 주요 클래스 (permutations, combinations ... )

    오늘은 python 에서 반복적인 데이터를 처리하는 기능을 가진 itertools 라이브러리의 주요한 클래스에 대해 알아봅시다. 저는 java로 먼저 코테 문제를 풀다가 python 으로 언어를 변경했는데, 이 때 python의 가장 강력한 장점 중 하나가 바로 이러한 모듈들을 직접 구현하지 않고 라이브러리를 사용만 하면 간단히 구현할 수 있다는 점인 것 같아요! iterable 객체를 가지고 주로 사용하는데, 이 때 iterable은 반복 가능한 List, Dictionary, Tuple 자료형 같은 객체를 말합니다. permutations 1. 단어의 뜻 먼저 사용하기 전! permutation 사전적 정의가 무엇일까요? "순열" 서로 다른 원소를 가진 집합에서 대상을 선택하여 순서있게 배열하는 것을..

    [프로그래머스] 2020 KAKAO 인턴십 (Lv1) : 키패드 누르기

    오늘은 2020년 카카오 인턴십 문제였던 "키패드 누르기" 문제를 풀어보았습니다. 1레벨임에도 비교적 다른 카카오 기출 문제 보단 시간이 필요했던 문제였던 것 같습니다. (저만 그런가요? 😅) 살짝 수학적인 계산이 필요한 조건이 있었는데, 거기서 약간 시간이 소요된 것 같습니다. 먼저 문제의 조건을 살펴볼까요? 1. 문제 https://programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]..

    [Python] bisect_left, bisect_right

    안녕하세요! 오늘은 python 이 기본 제공하는 이진 탐색 알고리즘을 구현한 bisect 모듈에 대해 알아보겠습니다. 1. 이진 탐색 먼저 이진 탐색이란 탐색 범위를 절반씩 좁혀나가면서 데이터를 탐색하는 알고리즘 입니다. 특히 데이터가 정렬된 상태일 때, 우수한 성능으로 탐색 합니다. 예를 들어 [1, 2, 3, 4, 5, 6, 7, 8, 9] 이라는 배열에서 Target = 3이라면 1. Middle 값을 기준으로 Target 값이 작은지 큰지 비교합니다. 2. 5 (Middle) > 3 (Target) : 기준 값보다 작으므로 5보다 큰 값들은 비교하지 않고 작은 값 들만 비교합니다. 3. [1, 2, 3, 4] 배열의 중간 값을 기준으로 또 비교를 하는데 4. 여기선 3이 middle이라 치면 t..

    [Swift] inout parameter

    함수 내의 매개변수 이름은 변경할 수 없다. 예를 들어 이렇게 코드를 작성하여 매개변수 name을 변경하려고 하면 name은 let 이기 때문에 변경할 수 없다는 에러가 발생한다! 함수 내의 매개변수 기본형은 let 인 것을 알 수 있다. 그래서 inout 키워드를 이용해서 변경이 가능한데, 사용 방법은 1. 매개변수의 자료형 앞에 inout 키워드를 붙이고 2. 변경할 값을 var 변수에 담은 다음에 3. 메소드를 호출 할 때 &를 변수(var 에 담은)에 넣어사용한다. 바뀐 매개변수 이름으로도 잘 출력 되는 것을 확인 할 수 있다. 이 Inout 키워드는 오픈소스를 활용할 때 종종 사용 있으니 알아두자!! * 학습영상 : https://www.youtube.com/watch?v=ge5BLzaTo8g&..

    [UIKit] UserDefault로 데이터 저장하기

    UserDefault를 사용하면 데이터 값이 plist에 값이 저장되어 영구적으로 사용 가능하다. 애플에서 공식문서를 보면 Key - Value로 구성되어 있는 Dictional 형태의 저장소임을 알 수 있다. 간단하게 값을 저장하고 불러오는 것이 가능하지만 plist에 저장되기 때문에 보안상 취약하다는 단점도 있다. 공식 문서 : https://developer.apple.com/documentation/foundation/userdefaults import UIKit let defaults = UserDefault.standard //선언 defaults.set(0.24, forKey: "Volume") //float defaults.set(true, forKey: "On") //bool defaul..

    [Swift] 타입 캐스팅(Type Casting) - in / as 키워드

    오늘은 타입 캐스팅에 관련해서 공부를 해보았다. 타입캐스팅은 두 연산자를 이용해서 사용한다. - is 연산자를 사용해서 인스턴스의 타입을 확인 - as 연산자를 사용해서 같은 계층에 있는 다른 슈퍼클래스나 서브클래스로 취급하는 방법 예를 들어 Animal이라는 슈퍼클래스가 선언되어 있고, Human과 Fish라는 Animal을 상속받고 있는 서브클래스가 있다. 슈퍼클래스 Animal은 이름 변수를 가진 생성자를 하나 갖고 있고 각 서브클래스에는 고유의 함수를 하나씩 갖고 있다고 해보자. class Animal { var name: String init(n: String){ name = n } } class Human: Animal { func code() { print("Tying away...") } ..

    [Python] 2019 KAKAO BLIND RECRUITMENT - 오픈채팅방

    문제 https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 문제가 길어서 어려워보일 수 있겠지만, 어렵다기 보단 친절한 문제인 것 같다. 채팅방에 들어왔다가 나갔을 때 기록이 남으며, 닉네임이 바뀌는 경우는 2개의 경우 인데 1. 채팅방을 나갔다가 똑같은 닉네임으로 다시 들어오는 경우 (이전 기록에도 이름이 변경됨) 2. 채팅방에서 닉네임을 변경하는 경우 처음 시도는 기록이 남겨질 때마다 Enter, Leave, ..

    [Web] Http가 무엇이며 Https와 차이점은?

    HTTP (Hyper Text Transfer Protocol) HTTP는 텍스트 기반의 통신 규약으로 서버/클라이언트 모델을 따라 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 유명한 팀 버러스 리(Tim Berners Lee)에 의해 처음 설계되었으며, WWW(World-Wide-Web) 기반에서 정보를 공유하는데 큰 역할을 했다. HTTP 동작 방식은 클라이언트와 서버가 요청(request)하고 응답(response) 하는 형태로 동작되는데 Request(요청) client ➡️ server 클라이언트가 브라우저를 통해 서버에게 원하는 서비스를 요청하는 2가지 방식이 있다. 1. GET 방식 : 요청 데이터의 인수를 웹 브라우저 URL을 통해 전송하고 인수를 ?로 값을 넣고, &로 결합시켜 전..

    [Python] heapq 사용시 리스트를 heapify / 값 하나씩 heappush 차이점

    프로그래머스 더 맵게 문제를 풀다가 리스트를 정렬하는 sort() 메소드를 사용하면 값은 나오는데 시간초과가 떠서, 배열을 heapq로 바꿔주는 heapify 대신 ( 제자리에서 힙으로 변환된다 ) 원소 하나하나를 heappush 하면 힙의 불변성을 유지하며 push, pop 된다. 파이썬에 내장된 heapq는 이진 트리이며 최소힙을 사용한다고 한다. 1. 리스트를 그대로 힙으로 변환할 때 import heapq arr = [9, 3, 2, 1, 12, 10] heapq.heapify(arr) print(arr) //[1, 3, 2, 9, 12, 10] 2. 원소 하나하나 heappush 할 때 import heapq arr2 = [9, 3, 2, 1, 12, 10] new_arr = [] for i i..

    [Python] 프로그래머스 고득점 Kit (스택/큐) : 프린터

    문제 코딩테스트 연습 - 프린터 [ 문제 조건 ] priorities : 현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 location : 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지 return 값 : 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 [ 해결순서 ] 처음에 문제를 풀 때 잘못 이해했다. 어떻게 이해했냐면 중요도가 중요도가 제일 높은 값을 발견할 때까지 계속 반복해서 앞에 값 뒤로 보내다가 최댓값이 발견되면 해당 인덱스가 몇번째인지 바로 리턴하게 코드를 짰다. 이렇게 풀면 프로그래머스에서 제시한 2가지 입출력 예에는 해당이 되지만 실패로 채점이 되고 다른 테스트 케이스에서는 제대로 작동하지 않는다. 반례로 priorities=[1,2,8,3,4]이고, loca..