Programming 48

.get() 딕셔너리에서 key를 사용해 value 얻기

dict_name[key] 입력 : key 출력: value 파이썬의 딕셔너리는 key, value 쌍으로 이루어진 해시형 자료구조이다. john = {'phone': '01840125784' , 'birthday': '19930512' , 'e-mail': 'johndoe@gmail.com' } 특정 key 값에 있는 value를 호출하고 있으면, dict_name[key] 를 사용하는데, dict_name.get(key)를 써도 똑같은 값을 return 한다. print(john['phone']) print(john.get('phone')) >> '01840125784' '01840125784' 둘의 차이점은 딕셔너리에 없는 key 값으로 호출할 때 있다. dict_name[key] 는 KeyErro..

Programming/Python 2021.05.04

프로그래머스 코딩테스트 lv 1. 완주하지 못한 선수 문제 풀이

문제 완주하지 못한 선수 생각 과정 입력 : 참여자 명단 리스트 / 완료자 명단 리스트 출력: 완주하지 못한 선수 문자열 주어진 조건에 의하면 단 한 명만 완주하지 않았기 때문에 참여자 명단 리스트에서 완료자 명단 리스트와 똑같은 것을 다 빼주면, 남는 1명을 찾으면 된다. 그런데 제한사항에서 참여자 리스트가 최대 10만 까지 가기 때문에 그냥 리스트를 for 반복문으로 계산하면 너무 오래 걸린다. 그리고 참여자의 이름에는 동명이인이 있다. 훨씬 속도가 빠른 딕셔너리로 {'사람이름' : '참가한 수'} 형태의 자료구조를 만들고, 완주자 리스트에 있으면 '참가한 수' 에서 한 명씩 빼주자. 제출 답안 def solution(participant, completion): par = {} #참여자 딕셔너리 만..

프로그래머스 코딩테스트 lv 1. 모의고사 문제 풀이

문제 : lv 1 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 입력 : 정답이 순서대로 들어있는 배열 answers 출력 : 가장 많은 정답을 맞힌 사람이 담긴 배열 answer 생각의 과정 세 사람은 아래의 배열이 계속 반복되는 방식으로 답을 입력한다. first = [1,2,3,4,5] second = [2,1,2,3,2,4,2,5] third = [3,3,1,1,2,2,4,4,5,5] 생각할 지점이 2개 있었다. 1. 문제의 갯수가 세 사람의 입력 배열보다 훨씬 길어지면 어떻게 할 것인가? 응답자 리..

map() - 리스트, 튜플 등에서의 각 요소를 지정된 함수로 처리해주는 내장함수

map(조건함수, 순회 가능한 데이터) 입력: 순회가능한 데이터 (리스트, 튜플), 조건함수 (파이썬 내장함수, 사용자 정의함수) 출력: map객체 리스트의 요소들인 숫자들을 문자열로 바꾼 새로운 리스트를 만들고 싶으면 어떻게 해야할까? for 문을 이용해 아이템 하나씩 바꿀 수도 있지만 너무 번거롭다. lst = [3, 6, 8, 2, 3] str_lst = [] for i in range(len(lst)): str_lst.append(str(lst[i])) str_lst >> ['3', '6', '8', '2', '3'] map() 을 쓰면 지정된 함수를 리스트 각 요소에 한꺼번에 적용해준다. lst = [3, 6, 8, 2, 3] str_lst = list(map(str, lst)) str_lst ..

Programming/Python 2021.04.26

set() - from list to set 리스트를 해시형 데이터 타입인 셋으로 변환하기

set 은 집합 자료형이다. 집합 연산을 쉽게 할 수 있다. 리스트를 셋으로 만들어 주면 데이터 타입이 1)해시형 데이터 타입 셋으로 바뀌면서 2)중복을 제거하고 3)정렬해준다. l = [1,2,3,4,5,1] ls= set(l) ls >> {1, 2, 3, 4, 5} 이와 같은 특징 때문에 중복을 제거하고 싶거나 정렬을 계속 해줘야 할 때 set 자료형을 활용한다. 리스트 말고 문자열도 set()으로 셋으로 만들어 줄 수 있다. s = "Hello" ss = set(s) ss >> {'H', 'e', 'l', 'o'} 정렬하고, 중복을 제거하는데, 대문자가 우선한다. 근데 리스트의 원소도 리스트면 set 변환이 되지 않고 type 에러가 난다. ll = [[1,1],[2,1],[1,2],[3,4],[2..

Programming/Python 2021.04.26

투 포인터 two pointer 를 활용하여 문제 해결하기

투 포인터란? 배열 (정렬된 경우가 많음)에서 start과 end 두 곳에 포인터를 두고 순차적으로 조작하는 기법 일반적인 방식이 리스트에서 포인터를 하나 두고 타겟을 찾아나간다면, 이것 양 방향에서 범위를 좁히거나 넓혀 나가는 식으로 문제를 해결하는 것 장점은? for 문을 두 번 돌리면 O(n^2) 의 복잡도 투 포인터 방식으로 풀 수 있다면 O(n) 복잡도로 해결이 가능해짐 문제 예시 두수의 합 정수로 된 정렬된 리스트를 입력으로 받고 덧셈하여 target을 만들 수 있는 두 숫자의 인덱스를 출력하는 문제 (리트 코드의 문제는 정렬된 리스트가 아니지만, 여기서는 투 포인터 풀이를 위해서 정렬된 리스트도 조건 한정) Example Input: nums = [2,7,11,15], target = 9 O..

[AI class day 5] 프로그래머스 코딩 테스트 문제 풀기 TIL

*lv 1부터 lv 4까지의 프로그래머스 문제들을 푸는 시간. 일단 lv1과 lv2를 최대한 풀어보는 것을 목표로 시작 lv1_완주하지 못한 선수 속도가 문제다. 해시형 자료 구조가 유리하다. 리스트를 딕셔너리로 바꿔서 해결 lv1_좌석 구매 마찬가지 키값이 중요하지는 않아서 set으로 바꿔서 해결 lv1_대중소 괄호 짝 맞추기 괄호 문제는 가장 마지막에 열린 괄호부터 닫아야 하기 때문에 LIFO 스택을 활용한다. 스택은 리스트를 활용하여 구현한다. * 참고 딕셔너리는 key, value 쌍인데 key를 가지고 value를 찾는게, value를 가지고 key를 찾는 것 보다 훨씬 간결하다. 찾고 싶은 것을 value에 넣자. lv1_세 소수의 합 문제 지문에 아예 에라토스테네스의 체를 활용해서 풀라고 제..

Programming/Python 2021.04.24

책 <파이썬 알고리즘 인터뷰> 정리

자료 구조, 알고리즘, 코딩 테스트에 대한 준비가 전혀 되어 있지 않은 나. 새로 시작한 K digital training 과정에 포함된 알고리즘과 코딩 테스트 과정 진도를 전혀 따라가지 못하고 있다. 잘은 모르지만 아마도 컴퓨터 공학을 대학에서 공부하는 친구들은 아마도 수업 시간에 좀 더 긴 시간을 가지고 공들여서 공부를 하는 부분인 것 같다. 나는 시간과 머리가 부족하지만, 아예 손을 놓고 있을 수 없으니 개발자 지인이 추천한 책을 일단 한 권 사서 보기 시작했다. 700페이지가 넘은 무지 두꺼운 책이다. 자료구조와 알고리즘, 문제 풀이가 주가 되지만, 머리 식힐 겸 읽어볼 만한 코딩 테스트 노하우, 이직 가이드 같은 내용도 있어 다행이 재미있게 보고 있다. 이제 겨우 읽기 시작했지만, 인상 깊거나 ..

[AI class day 4] 파이썬 코딩테스트 문제 풀이 TIL

*3일차에 이어서 알고리즘 문제 풀이를 하고 있다. 2번 문제 같은 경우에는 너무 어렵게 느껴졌다. 다른 문제들은 몇 가지 중요한 key point만 잡으면 풀 수 있겠다 싶었는데, 2번 문제의 경우는 해설과 모범 답안을 보고도 헤매는 느낌. --> 기본기가 너무 없는 것 같아서 라는 책을 사서 읽고 있는 중인데, '다이내믹 프로그래밍'은 복잡하고 어렵다는 구절이 나왔다. 내가 헤맨 2번이 바로 다이나믹 프로그래밍. 지금 이해 못하더라도 조금 위안을 얻었다. 일단 넘어가고 좀 더 쉬운 것들 부터 이해하려고 노력하려 한다. 1. 힙 Heap 대표 문제 풀이 : 더 맵게 힙은 특정 특성을 가지고 있는 완전 트리의 한 종류 (최대 힙/ 최소 힙) 참고 : 힙 정리 *섞어서 새로운 음식을 만들어 내는 공식이 있..

Programming/Python 2021.04.23

[AI class day 3] 파이썬 코딩테스트 문제 풀이 TIL

* 3일차는 자료구조와 알고리즘 수업을 지나서, 프로그래머스 사이트나 입사용 코딩 테스트에서 많이 접하는 알고리즘 문제 풀이를 하는 동영상 강의를 들었다. 본 강의는 프로그래머스 사이트의 [Python/문제풀이] 파이썬을 무기로, 코딩테스트 광탈을 면하자! 와 동일한 것 같다. 커리큘럼이 동일하다. 나처럼 코딩테스트 문제 풀이에 익숙하지 않거나, 문제는 어찌저찌 풀었지만 효율성 테스트에서 계속 실패하는 사람들은 문제에 어떻게 접근할 것인지 힌트를 얻기에 도움이 될 것 같다. 1. 해시(Hash) 대표 문제 풀이: "완주하지 못한 선수" * 참고* 1. 문제의 데이터 크기를 잘 봐야 한다. 2. 문제의 제한 사항을 잘 읽어야 한다. 이 문제는 해시 Hash 자료 구조로 풀면 편리하다. 해시란? key - ..

Programming/Python 2021.04.22

자료 구조와 알고리즘 공부 기초부터 공부하기

K digital training 코스를 시작했다. 운영 기관에 따라 커리큘럼이 다르지만, 내가 공부하는 곳은 첫째 주 커리큘럼이 알고리즘이다. 알고리즘. 개발 공부를 체계적으로 하기 위해서, 취업을 위한 코딩 테스트를 통과하기 위해서, 코더가 아닌 보다 깊이 있는 프로그래머로 발전하기 위해서 꼭 필요하다는 얘기는 들었지만, HTML 코드부터 무턱대고 따라찍어 가면서 공부를 시작한 나에게는 제공하는 강의와 과제가 너무 어려웠다. 처음부터 내 수준보다 너무 높은 데서 시작하니까 좌절감만 들고 어떻게 해야할지 모르겠다. 나머지 공부로 좀 더 쉬운 수준부터 알고리즘 공부를 다시 해야할 상황 한 블로거 분이 본인이 찾아본 공부 매터리얼과 순서를 공유해주셔서 참고해 보았다. blog.yena.io/studynot..

Programming/Python 2021.04.22

[AI class day 2] 파이썬 자료구조와 알고리즘 TIL

* 첫째날과 이어서 자료구조를 공부하고 있다. 선형 자료구조인 연결리스트, 스택, 큐 이차원 자료구조인 트리 의 개념에 대해 정리하고, 구현하는 실습을 했다. OOP에 자신이 없어서 한참을 헤매고 있다. 12. 스택의 응용 - 수식의 후위 표기법(Postfix Notation) 중위 표기법 (infix notation) : 우리가 일상에서 사용하는 수식 표기법 연산자를 가운데에 ex. A+B 후위 표기법 : 연산자를 뒤에 ex.AB+ --> 후위 표기법을 이용하면 괄호를 쓰지 않고 연산의 우선순위 표현이 가능함 ABC*+ --> B*C를 먼저하고 그다음에 +A 하라는 뜻 = A+(B*C) 1) 중위 표기법으로 쓰인 수식을 후위 표기법으로 변환 2) 후위 표기법으로 쓰인 수식 계산 --> 각각 스택을 활용..

Programming/Python 2021.04.21

[AI class day 1] 파이썬 자료구조와 알고리즘 TIL

del(lst[2]) print(lst) * 국가에서 지원하는 K-digital training 인공지능 코스를 수강하게 되었다. 여러 기관에서 이 코스를 진행하는 것으로 알고 있고, 상세한 커리큘럼과 난이도는 조금씩 다르다고 한다. 내가 수강하는 기관은 매일 매일 공부한 내용을 정리하여 포스팅할 것을 권장한다. 그날 공부한 내용을 정리하고 잘 몰랐다가 알게 된 것들에 대한 기록을 남기려고 한다. *감상 : 솔직히 7~9강의 연결리스트는 너무 어려웠다. 파이썬 클래스에 대해서 배운 적이 있기는 하지만, (작년 11월에 파이썬 입문 수업 때) 지난, 1~3월에 들었던 빅데이터 분석 수업에서는 거의 활용하지 않았었기 때문에 가물가물하다. 솔직히 여기서 너무 헤매서 커리큘럼에서 하루 동안 제시한 진도를 모두 ..

Programming/Python 2021.04.20