목록분류 전체보기 (128)
운동하는 개발자의 메모장

TypeDescriptionExampleint정수형(Integer)1, 100, -3float실수형(소수점이 있는 숫자)3.14, -0.5, 2.0bool논리형(Boolean, 참 / 거짓)True, Falsestr문자열(String)'hello', "0010"list리스트(배열처럼 사용)[1, 2, 3], [0, "one", 3, "four"]tuple튜플(변경 불가능한 리스트)(1, "ab", 3.14, True)dict딕셔너리(Key-Value 쌍으로 저장){"name": "Han", "age": 10}set집합(중복 없는 요소들의 모음){1, "ab", 3.14, True}None아무 값도 없음(Null 개념)None

▶ for 문이란?Iterable(반복 가능한 객체)를 순서대로 하나씩 꺼내면서 block 안의 코드를 반복 실행하는 구조. ▷ Python에서 Iterable 이 아닌 Typeint(정수)float(실수)bool(논리형)None▶ 기본 문법for [변수] in [반복 가능한 객체]: [실행 코드][변수] : 반복마다 꺼내지는 값을 담는 곳[반복 가능한 객체] : 문자열, list, tuple, dictionary, range 등반복 가능한 객체 조건에 따라 [실행 코드] 가 수행된다.문자열 반복# 문자열 선언text = "hello"# 문자열을 순서대로 하나씩 출력한다.for char in text: print(char) 결과hello Iterable Type의 변수만 가능!List 반복# list 선..

2025년 대 AI 시대가 도래했다. 아니 이미 AI는 세상을 지배를 하고 있다. 거의 모든 분야에 장악하다시피 AI가 적용되고 있고, 그 속도는 우리(특히 필자)가 최첨단 기술에서 창출된 새로운 정보를 겨우 바라만 볼 수밖에 없을 정도로 빠르다. 예전에는 정보의 바닷속에서 이리저리 휩쓸린다면 이제는 압도적인 양의 정보 쓰나미에 인지도 못한 체 어느 순간 수장당할 것 같은 느낌이다. 1차 산업혁명은 18세기 후반~19세기 초반에 이뤄줬다. 영국을 중심으로 증기기관과 기계화가 발전한 시기이다. 이동 속도나 생산력이 폭발적으로 성장하게 되었고, 이는 세계화의 발판이 되었다. 2차 산업혁명이 발생한 19세기 후반~20세기 초반에는 전기를 이용한 대량 생산이 이뤄졌으며, 컨베이어 벨트나 전기 모터 따위의 기..

1. 산술 연산자 (Arithmetic Operators) 연산자설명예시+더하기5 + 3 -> 8-빼기5 - 3 -> 2*곱하기5 * 3 -> 15/나누기 (실수)5 / 2 -> 2.5//나누기 (몫)5 // 2 -> 2%나머지5 % 2 -> 1**거듭제곱2 ** 3 -> 8이런,, 기본적인 산술 연산자 부터 자바랑 차이가 있다./, ** 처리를 연산자로만 수행 가능한 게 신기했다. 확실히 편한 언어인 것 같다..2. 비교 연산자 (Comparison Operators)연산자설명예시==같음5 == 3 -> False!=같지 않음5 != 3 -> True>크다5 > 3 -> True작다5 False>=크거나 같음5 >= 3 -> True작거나 같음5 False 3. 논리 연산자 (Logical Oper..

여러 코드를 마주하다보면 Stream이 적지 않게 보이는 걸 알 수 있다. 특히 IO가 많이 발생하는 Client 부분의 코드에서 많이 보였다. 그냥 단순히 반복문을 간결하게 작성하는 기능 선에서만 대충 알고 있었는데, 이번 기회에 알아보기나 하자는 느낌으로 포스팅을 했다. 일단 Stream 을 왜 사용하는 지 부터 궁금했다. 여러 포스팅을 읽어보고 Java 공식 문서도 읽어보았다. 사용하는 이유가 정말 다양했지만 단편적으로 느낀 첫 번째 이유는 많은 양의 병렬 처리가 필요할 때 사용하면 좋다는 것이다. 코드 자체가 간결해져서 가독성이 향상되는 단편적인 장점도 있지만 아무래도 중, 장기적으로는 성능적인 면을 제대로 파악해야 적재적소에 Stream을 사용할 수 있을 것으로 판단했다. 많은 양의 병렬 처리..

문제 설명문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 ..

문제 설명로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 순위당첨 내용16개 번호가 모두 일치25개 번호가 일치34개 번호가 일치43개 번호가 일치52개 번호가 일치6(낙첨)그 외로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.알아볼 수 없는 번호를 0으로 표기하기로 하고, 민우가 구매한 로또 번호 6개가 44, 1, 0, 0, 31 25라고 가정해보겠습니다. 당첨 번호 6개가 31, ..

문제 설명수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.제한사항마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.completion의 길이는 participant의 길이보다 1 작습니다.참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예participant completion return["leo", "kiki", "ede..

자료구조특징추가(ADD) 속도읽기(READ) 속도검색(SEARCH) 속도삭제(DELETE) 속도배열(Array)고정 크기.메모리 연속 저장.인텍스 기반 접근.불가(크기 고정)O(1)O(n)-ArrayList크기 동적 증가.인덱스 기반 접근.O(1)(끝에 추가 시)O(1)O(n)(전체 탐색)O(n)(중간 삭제 시)LinkedList노드 기반 연결 구조.삽입 및 삭제 빠름.O(1)(노드 추가 시)O(n)O(n)O(1)(노드 삭제 시)HashMap키 - 값 기반 저장.해싱 사용으로 빠른 접근.O(1)O(1)O(1)O(1)HashSet유일한 값만 저장.순서 없음.O(1)O(1)O(1)O(1)TreeMap정렬된 키-값 쌍 저장.키를 기준으로 자동 정렬.O(log n)O(log n)O(log n)O(log n)Tr..
2023년 1월 2일에 지금 다니는 회사를 입사했다. 회사에서는 많은 오픈소스를 사용한다. Logstash, Kafka, Redis, Elasticsearch, Docker 등등. 아무것도 모르는 채 입사했다고 해도 과언이 아니다. 물론 아직도 모르는 게 많지만, 그래도 그 당시 내 모습과는 발전했다고 자부할 수 있다. 처음 입사했을 때 IDE로 IntelliJ를 사용했는 데, 디버깅하는 법도 몰라서 사수님께 물어봤었다. 부끄럽지만 그땐 그랬다. 더구나 본인은 명석한 두뇌는커녕 지극히 평범한 수준의 지능이어서 전부를 기억하기가 만무했다. 그래서 2023년에는 사소한 것까지 전부 나름의 문서를 작성했었던 것 같다. 그리고 그때의 문서들이 지금 나를 지탱하는 힘 중에 하나가 되고 있다. 2024년에는 참 다..