분류 전체보기

    [프로그래머스 문제풀이]2023 KAKAO BLIND RECRUITMENT 표현 가능한 이진트리

    이번 문제를 풀 때 가장 중요한 점은 주어진 수가 이진트리로 표현할 수 있는가? 였습니다. 따라서 처음에 주어진 수를 이진수로 변환한 뒤 이진트리가 될 수 있도록 패딩을 먼저 진행하였습니다. ( 자릿수가 2의 제곱수보다 1 작도록 설정 ) 그 후 루트 노드 ( 이진수의 가운데 수 )의 왼쪽 트리의 루트 노드, 오른쪽 트리의 루트노드를 검색하는 재귀 함수를 작성하였습니다. 이때 루트노드가 0이며, 왼쪽 트리의 루트 노드, 오른쪽 트리의 루트 노드가 모두 1일 경우 표현 불가능한 이진트리로 판단하였습니다. 문제 자체는 어렵지 않고, 실제로 작년 카카오 코딩테스트 때 구상까지는 완료하였으나, 구현에서 막혀 풀지 못한 문제였습니다. import math def get_digit(number): pow = 0 w..

    스트림

    모던 자바 인 액션 정리본 스트림 스트림은 자바 8 API에 새로 추가된 기능 스트림 특징 스트림을 사용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. ( 데이터를 직접 처리하는 구현 코드 대신 질의로 표현 ) 또한 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. filter, sorted, map , collect 같은 연산은 고수준 빌딩 블록으로 이루어져 특정 스레드 모델에 제한되지 않고 자유롭게 사용할 수 있다. 따라서 데이터 처리 과정을 병렬화하면 스레드와 락을 걱정할 필요가 없다. - 선언형 : 더 간결하고 가독성이 좋아진다. - 조립할 수 있음 : 유연성이 좋아진다. - 병렬화 : 성능이 좋아진다. 스트림 정의 스트림이란 데이터 처리 연산을 지원하도록 소스에서 추..

    JVM이란

    JVM이란

    Java공부를 하면 JVM 이란 단어를 많이 들어보고 공부해 봤을 것이다. 이번 기회에 JVM에 대해 자세히 알아보자. JVM이란? -Java Virtual Machine - 자바를 실행시키기 위한 가상 기계라고 해석할 수 있다. - 사용자의 OS에 종속받지 않고 OS 위에서 가상 기계를 통해 자바를 실행시킨다. 따라서 자바는 사용자의 OS 종류에 관계없이 자바를 실행할 수 있다. - 구성 : 자바 인터프리터, JIT , 클래스 로더, Runtime Data Area, 가비지 컬렉터로 되어있다. JIT & Interpreter 위의 그림을 보게 되면 java 파일을 컴파일러를 통해 .class 파일로 변환한 뒤 JVM이. class 파일을 받아 바이트 코드의 명령에 따라 내재된 기능을 수행한다. Java..

    람다 표현식

    모던 자바 인 액션 정리본 람다 표현식 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다의 특징 - 익명 : 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. - 함수 : 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. - 전달 : 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. - 간결성 : 익명 클래스처럼 코드를 구현할 필요가 없다. 람다는 세 부분으로 이루어진다. ( Apple a1, Apple a2 ) -> a1.getWeight().compareTo(a2.getWeight()); 람다 파라미터 화살표 람다 바디 - 파라미터 리스트 : Comparator의 compare 메서드 파라미터 ( 사과 두 개 ) - 화살표 : 화..

    동적 파라미터화

    모던 자바 인 액션 정리본 동적 파라미터화란? 동적 파라미터화란 메서드가 다양한 동작을 받아서 내부적으로 다양한 동작을 수행할 수 있다. 책에선 이렇게 쓰여있다. 이를 해석하자면 함수의 파라미터로 들어온 인자가 변수뿐만 아니라 메서드로 들어와 함수 내에서 다양한 동작 즉, 인자로 들어온 메서드를 수행할 수 있다.라고 해석할 수 있다. ApplePredicate를 이용한 필터 메서드를 통해 동적 파라미터를 어떻게 동작시키는지 알아보자. public static List filter(List inventory, ApplePredicate p) { List result = new ArrayList(); for (Apple apple : inventory) { if (p.test(apple)) { result...

    WAS, Servlet 용어 정리

    WAS, Servlet 용어 정리

    백앤드 공부를 하던 도중 서버와 관련된 헷갈리는 용어가 많아 이번기회에 정리하려 한다. 0. 웹서버 등장 배경 초창기엔 정적 웹사이트만 존재하여 모든 페이지의 모든 내용이 정해져 있어 사용자의 요구를 맞출 수 없었다. 이에 대해 동적인 웹사이트가 등장하였고, 이때 등장한 것이 CGI(Common Gateway Interface)였다. CGI는 서버에서 수행 중인 프로세스 사이에 정보를 주고받는 규칙을 의미했다. CGI는 Perl, C, C++ 등의 언어를 지원하면서 웹 서버를 통해 요청을 받고 실행 결과를 다시 웹 서버를 거쳐 클라이언트의 브라우저로 보낼 수 있는 기능을 지닌다. 하지만 CGI는 각각의 클라이언트의 요청에 대해서 독립적인 별도의 프로세스가 생성하기 때문에 , 프로세스가 많아질수록 시스템에..

    Java List 와 배열

    Java List 와 배열

    자바를 공부하며 List와 배열의 차이점을 자세히 알지 못해 이번 기회에 제대로 정리해보려 합니다. 1. 배열 우선 크기가 3인 정수형 배열을 선언해 봅시다. int[] arr = new int[3]; 배열을 선언하게 되면 같은 자료형의 원소들이 정해진 크기의 배열이 메모리에 할당합니다. 여기서 포인트는 정해진 크기, 같은 자료형입니다. 정해진 크기가 존재하기 때문에 배열의 크기를 늘리거나 줄일 수 없습니다. 원소가 들어있지 않은 배열이나 꽉 찬 배열이나 같은 크기의 같은 자료형의 배열이라면 메모리에 같은 크기가 각각 할당됩니다. 또한 메모리에 연속적으로 할당됩니다. - 시간 복잡도 원소 접근 : O(1) 2. List 그림을 보면 더 쉽게 이해가 가능합니다. 우선 Java에서 List는 Interfac..

    [프로그래머스 문제풀이] 코딩 테스트 준비

    사실 카카오 인턴 코딩테스트를 봤었기 때문에 문제의 내용과 어떻게 풀어야 할지는 대충 감을 잡은 상태로 문제를 풀었습니다. 단순히 DP로만 풀면 되겠지 하고 문제를 풀어나갔을 때 정확성만 맞고 효율성에서 시간초과가 가는 코드를 작성하였습니다. 제가 이와같은 문제를 해결할 때 두 가지 문제 점이 있었는데, 한가지는 시간복잡도 , 다른 한가지는 alp, cop 가 m_alp, m_cop ( 알고력 중 제일 높은 알고력, 코딩력 중 제일 높은 코딩력 ) 보다 큰 경우입니다. 시간 복잡도를 맞추기 위해 커팅이 필요했는데 카카오 문제풀이 해설에서 시간 복잡도가 O(목표 알고력 * 목표 코딩력 * ( problems 배열의 길이 )) 라고 하여 이에 맞게 조정하였습니다. alp, cop 가 m_alp, m_cop ..