전체 글 140

[Java] ArrayList 파헤쳐 보기

Java 개발에서 Collection의 데이터 타입을 사용하면서 내부 코드를 볼 생각을 하지는 않았었는데, 직접 ArrayList 클래스를 살펴보며 어떻게 동작하는지 공부해보니 흥미로운 부분이 많았다. 여기서는 ArrayList의 생성자, 삽입/삭제/초기화/정렬 메소드 중심으로 정리해보려 한다. Resizable-array implementation of the List ArrayList란 Size가 변하는 배열을 말한다. 그리고 다음과 같은 몇가지 특징을 가진다. o 중간에 데이터를 삽입, 삭제하는 것이 가능 o Reference Data Type만 넣을 수 있음 o Thread Safe 하지 않음 그럼 코드를 한 번 살펴보자. o 인스턴스 변수 : ArrayList는 값을 담고있는 Object배열과 ..

Language/Java 2021.10.06

[Python][백준] 1406_에디터

https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 더보기 문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는 문장의 맨 앞(첫 번째 문자의 왼쪽), 문장의 맨 뒤(마지막 문자의 오른쪽), 또는 문장 중간 임의의 곳(모든 연속된 두 문자 사이)에 위치할 수 있다. 즉 길이가 L인 문자열이 현재 편집기에 ..

[Python][백준] 1874_스택 수열

https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 더보기 문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까..

[Python][프로그래머스] 72412_순위 검색

2021 KAKAO BLIND RECRUITMENT https://programmers.co.kr/learn/courses/30/lessons/72412 = score, scoreMap[k]))) --- (X) ## 효율성 통과를 위해서는 이분탐색 필요 ans = len(scoreMap[k]) - bisect.bisect_left(scoreMap[k], score) answer.append(ans) return answer def saveOp(op, st, i): global scoreMap if i == 4: score = int(op[4]) if st in scoreMap.keys(): scoreMap[st].append(score) else: scoreMap[st] = [score] return s..

[Java] 자바에서의 다중상속과 인터페이스의 Default Method

Java는 다중상속을 허용하지 않는다. 자바를 사용하면서 당연하게 생각하는 규칙인데, 그렇다면 그 이유가 무엇일까? 그리고 정말로 자바에서 다중상속이 불가능한지 알아보자. 다이아몬드 문제 (Diamond Problem) 다음과 같은 구조에서 다중상속을 허용한다고 가정해보자. Father, Mother 클래스는 Parent 클래스의 추상메소드 funcA() 를 각각 구현한다. Child 클래스가 Father, Mother 클래스를 둘 다 extends 한다면, Child.funcA() 는 어떤 메소드를 상속받아야할지 알 수 없다. ==> 다중상속의 모호성으로 이를 금지한다. 인터페이스를 사용한 다중상속 (Default Method) 클래스의 상속과 반대로 인터페이스는 여러 개를 implements 할 수 ..

Language/Java 2021.09.18

이중화 서버에서의 무중단 배포 (Rolling, Blue-green, Canary)

현재 회사에서 담당하고 있는 서비스는 온프레미스 환경에서 Rolling 전략의 배포를 진행하고 있다. DevOps가 중요해지는 만큼 배포 프로세스와 각각의 특징에 대해서 좀 더 자세히 알아보았다. 먼저, 왜 이중화 서버가 필요할까? 서버를 이중화하는 가장 큰 목표는 LoadBalance(부하균형)와 Failover(시스템 대체 작동)이다. (1) 로드밸런싱(LoadBalance) 서버의 트래픽에 부하가 발생할 때 성능 향상을 위해서는 서버 자체를 고사양으로 업데이트하는 Scale-up 방식과 서버의 갯수를 증가시켜 트래픽이 분산되도록 하는 Scale-out 방식이 있다. 즉, 서버의 이중화는 Scale-out을 통해 서버의 성능을 향상시킬 수 있다. 이중화 서버는 L4장비(스위치)를 통해 로드밸런싱이 가..

DevOps/CIㆍCD 2021.09.17

[Java] Wrapper Class의 생성과 Cache

Java의 데이터 타입은 크게 Primitive Type (기본형), Reference Type (참조형) 두가지가 있다. Java의 기본형 변수는 참조형으로 바꿀 수 있는데 이를 Wrapper Class라고 한다. Wrapper Class는 왜 쓰는걸까? 사실 코딩을 하면서 개발자가 직접 기본형 -> 참조형으로 변수 타입을 변경(Boxing)하는 일은 많지 않은 것 같다. JDK 1.5버전 이후부터 자동으로 변수타입을 바꾸어주기 때문인데, 내부적으로는 Wrapper Class는 몇가지 특징을 가진다. 1) 다형성 자주 쓰는 java.util.*의 Collections 함수들은 대부분 Object 타입으로 매개변수를 받고, 반환한다. 마찬가지로 Generic Type도 마찬가지다. 기본형의 변수를 Wra..

Language/Java 2021.09.13

[Python][프로그래머스] 72410_신규 아이디 추천

2021 KAKAO BLIND RECRUITMENT https://programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 더보기 문제 설명 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 가입하는 유저들이 카카오 아이디 규칙에 맞지 않는 아이디를 입력했을 때, 입력된 아이디와 유사하면서 규..

[Python][프로그래머스] 64064_불량 사용자

2019 카카오 개발자 겨울 인턴십 https://programmers.co.kr/learn/courses/30/lessons/64064# 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr 더보기 문제 설명 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 사용자라는 이름으로 목록을 만들어서 당첨 처리 시 제외하도록 이벤트 당첨자 담당자인 "프로도" 에게 전달하려고 합니다. 이 때..

[Python][프로그래머스] 64062_징검다리 건너기

2019 카카오 개발자 겨울 인턴십 https://programmers.co.kr/learn/courses/30/lessons/64062 코딩테스트 연습 - 징검다리 건너기 [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3 programmers.co.kr 더보기 문제 설명 [본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.] 카카오 초등학교의 "니니즈 친구들"이 "라이언" 선생님과 함께 가을 소풍을 가는 중에 징검다리가 있는 개울을 만나서 건너편으로 건너려고 합니다. "라이언" 선생님은 "니니즈 친구들"이 무사히 징검다리를 건널 수 있도록 다음과 같이 규칙을 만들었습니다. 징검다리는 일렬로 놓여 있고 각 징검다리의 디딤돌에는 모두 숫자가 적혀 있으며 디딤돌의 숫자는 한 번 밟을..