본문 바로가기

전체 글78

[백준] 1463번: 1로 만들기 Hint 1. n에서 2나 3을 나누거나 1을 뺄 생각하지 말고 1부터 고려하는 코드로 짜야함 2. 1부터 n까지의 숫자를 각각 만들기 위해선 몇번의 연산 횟수가 필요한지 생각해봐야 함 3. Memoization 기법 활용 백준 1463번: 1로 만들기 (풀어보기) n = int(input()) ans = [0] * (n+1) # ans[i] = i가 1이 되기 위한 연산 횟수 for i in range(2, n+1): ans[i] = ans[i-1] + 1 # 디폴트로는 그 전 숫자에서 +1 한거니까 횟수도 그 전 숫자의 횟수에 +1 한것임 if i % 3 == 0: ans[i] = min(ans[i], ans[i // 3] + 1) # 디폴트와 x3 하기 전의 숫자의 횟수에서 +1 한거 중에 더 작은.. 2023. 2. 17.
콜백함수, 콜백지옥 Goal 1. 콜백함수 개념 이해하기 2. 콜백지옥에서 벗어날 수 있는 방법 알아보기 콜백함수란? 콜백함수란 간단하게 얘기하자면 코드가 완료되면 실행되는 부분이다 비동기로 처리되는 프로세스들은 콜백함수를 하나씩 가지고 있어서 Web API에서 실행된 비동기 함수들이 언제 끝났는지 알 수 있다 Web API에서 끝난 비동기 함수들의 콜백함수들이 자바스크립트 엔진에서 실행되도록 이벤트 루프(event loop)가 하나씩 처리한다 콜백지옥이란? 콜백함수 안에 콜백함수 안에 콜백함수 안에 콜백함수 안에 … 여러 콜백함수들이 괄호 안에 괄호 안에 괄호 안에 계속 들어가 있는 코드 형태를 콜백지옥이라고 한다 이런 경우 코드의 가독성도 떨어지고 실수 위험도 커진다 콜백지옥 대처 방법 Promise (ES6 버전부터).. 2023. 2. 16.
비동기와 동기 Goal 1. 비동기와 동기 코드의 차이 이해하기 비동기 vs. 동기 차이점 비동기 동기 정의 요청한 후에 결과를 기다리지 않고 동시에 다른 작업을 수행하는 방식 시간과 관계없이 요청에 대한 응답이 올 때까지 프로그램 수행을 멈추고 기다리는 방식 용도 시간이 오래 걸리는 작업을 수행할 때 흔히 사용 순차적으로 진행되어야 하는 작업 처리 스레드 스레드나 프로세스가 여러개가 한번에 돌고 있음 한번에 하나의 프로세스만 진행 엔진 브라우저나 Node.js에서 운영하는 Web API에서 실행 자바스크립트 엔진으로 실행 코드 작성 여러 프로세스가 한번에 돌아가기 때문에 로직을 구성하기 어려울 수 있음 순차적으로 진행되기 때문에 이해가 쉽고 작성하기 쉬움 2023. 2. 15.
에라토스테네스의 체 Goal 1. 소수 정의하기 2. 소수 찾는 알고리즘 - "에라토스테네스의 체" 이해하기 소수란? 소수란 숫자 중 나 자신과 1로만 나눠지는 수다. 즉, 그 2개의 수 이외의 다른 수로 나눠진다면 소수가 아닌 "합성수" 라고 말할 수 있다! 예시) 소수 : 2, 3, 5, 7, 11, 13, 17, 19, ... 그 외 : 4 (2로 나눠지니까), 6 (2와 3으로 나눠지니까), 8 (2로 나눠지니까), 9 (3으로 나눠지니까), ... "에라토스테네스의 체"는 언제 필요한가? N이라는 숫자가 소수인지 아닌지 판단하기 위해서는 2부터 N/2 까지의 숫자로 나눠봐야 알 수 있다 하지만 2부터 100까지의 숫자 중에서 소수를 출력하라고 한다면 이중 for문을 돌려야하고 시간 복잡도는 O(n^2)으로 느리다 .. 2023. 2. 13.
안드로이드 에뮬레이터 Goal 1. 안드로이드 에뮬레이터 다운로드 방법 알아보기 안드로이드 에뮬리터 다운로드 1. Android Studio 다운로드 받기 (Download) 2. Android Studio 설치 후 실행하기 3. Android SDK 다운로드 받기 4. 원하는 버전 골라서 OK 누르면 Android SDK 다운로드 완성 5. VS Code에서 Android SDK 저장되어 있는 경로 config에 추가해주기 flutter config --android-sdk C:\Users\%USERNAME%\AppData\Local\Android\Sdk flutter doctor --android-licenses 안드로이드 에뮬레이터 실행 1. Android Studio에서 새로운 AVD (Android Virtual D.. 2023. 2. 12.
의존성, 의존관계 주입 Goal 1. 의존성 / 의존관계와 주입식 방법 알아보기 2. 생성자 주입을 권장하는 이유 설명하기 의존성 / 의존관계란? A가 B를 의존한다 = B가 변하면 A에게도 영향을 미친다 자바에서 클래스 간 의존관계를 생성하는 방법은 3가지로 볼 수 있다. 방법 설명 권장 @Autowired 필드 주입식 방법 원래 사용했었는데 이제는 IntelliJ에서 생성자 주입식 방법 쓰라고 경고 뜸 @Setter 수정자 주입식 방법 Public 메소드를 통해 아무나 수정 가능하기 때문에 보안성 문제가 있 @RequiredArgsConstructor 생성자 주입식 방법 ***가장 권장 하는 방법*** 1. 필드 주입식 방법 new 키워드 써서 의존하게 되면 Driver가 생성될 때 이미 어떤 차를 가지는지 정해져 있기 때.. 2023. 2. 11.
힙(Heap) 응용방법 Goal 1. 힙의 응용 방법 알아보기 함수 heappop() 이용하기 중요한 점은 heapq.heappop(heap)은 항상 heap에서 가장 작은 값을 반환한다는 것이다. 작은 수 ➡️ 큰 수 아래와 같이 1에서 5까지의 숫자가 있을 때 heap을 이용하면 가장 작은 수부터 순서대로 뽑는 것은 간단하다. import heapq arr = [1, 2, 3, 4, 5] heap = [] for num in arr: heapq.heappush(heap, num) for i in range(len(heap)): print(heapq.heappop(heap))# 출력: 1 2 3 4 5 큰 수 ➡️ 작은 수 거꾸로 힙을 이용해서 큰 수부터 순서대로 뽑는 것도 가능하다. import heapq arr = [1,.. 2023. 2. 10.
우선순위 큐 Goal 1. 우선순위 큐 이해하기 2. 힙(Heap) 자료구조 이해하기 우선순위 큐란? 높은 우선순위를 가진 원소가 낮은 우선순위를 가진 원소보다 먼저 처리된다 파이썬에선 힙(heap)이라는 자료 구조로 구현이 가능하다 힙(heap)이란? 완전 이진 트리(Complete Binary Tree)로 루트 노드에 있는 값은 트리에서 최대값 (Max Heap) 혹은 최소값 (Min Heap)이다 부모 노드의 값이 자식 노드의 값보다 항상 크거나 (Max Heap) 항상 작다 (Min Heap) 2023. 2. 9.
Java, JIT Compiler, JVM Goal 1. 자바의 컴파일 과정 이해하기 2. JVM의 역할 설명하기 Q. 자바 소스코드가 컴파일 되는 과정을 설명해 보시오. A. 개발자가 자바 소스코드를 작성한다 (*.java) 자바 컴파일러가 소스코드 파일을 바이트코드로 컴파일 한다 (*.class) 바이트코드를 JVM (Java Virtual Machine)의 클래스 로더에 전달한다 클래스 로더는 동적로딩을 통해 필요한 클래스들을 로딩 및 링크하여 JVM 메모리에 올린다 실행 엔진(인터프리터 또는 JIT 컴파일러)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와 실행한다 📝 바이트코드 : 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있는 파일 (컴퓨터가 읽을 수 없음) 📝 인터프리터 : 바이트 코드 .. 2023. 2. 8.