본문 바로가기

전체 글

(86)
[Medium] 1046. Last Stone Weight (구글 코딩 테스트 기출문제) #문제 설명 #문제 풀이 class Solution { public int lastStoneWeight(int[] stones) { PriorityQueue maxHeap = new PriorityQueue(Collections.reverseOrder()); int sum = 0; for(int i = 0; i 1){ int num1 = 0; int num2 = 0; if(maxHeap.size() >= 2){ num1 = maxHeap.poll(); num2 = maxHeap.poll(); } m..
[Medium] 1337. The K Weakest Rows in a Matrix #문제 설명 1337번 문제는 정수 k와 n x m matrix가 주어진다. 각 열은 0과 1로 구성 돼있다. 1은 군인을 나타내고 0은 시민을 나타낸다. 각 열에서 1 (군인)보다 먼저 0 (시민)이 나올 순 없다 (열에서 1이 다 나열된 뒤 0이 나열됨). 이 문제에선 주어진 정수 k번째로 "약한" (군인이 적은) 열 들을 담은 array를 return 시켜주면 된다. #문제 풀이 #Heap 사용 풀이 class Solution { public int[] kWeakestRows(int[][] mat, int k) { int m = mat.length; int n = mat[0].length; // Create a Priority Queue that measures firstly on strength ..
[Medium] 347. Top K Frequent Elements (애플/MS/메타/아마존) #문제 설명 Leetcode 347번 문제는 array와 정수 k가 주어진다. 배열에서 가장 빈도가 높은 k개의 요소를 return하면된다. 예를 들어 [1,1,1,2,2,3]이 라는 배열에 k=2가 주어지면 1 (빈도 3번) 과 2 (빈도 2번)을 반환해주면 된다. 만약 k=3이라면 1,2,3 모두 반환 해주면 된다 #문제 풀이 class Solution { public int[] topKFrequent(int[] nums, int k) { // O(1) time if (k == nums.length) { return nums; } // 1. build hash map : character and how often it appears // O(N) time Map count = new HashMap()..
[Medium] Kth Largest Element in an Array (아마존/구글) #문제 설명 Leetcode 215번 문제는 정수로 채워진 배열 nums와 정수 k가 주어진다. 주어진 배열안에서 k번째로 큰 정수를 return하면 된다. 위에 예시를 보면 [3,2,1,5,6,4] 의 배열과 k=2가 주어진다 이경우 에는 배열에서 2번째로 큰 숫자를 return하면 되기에 5를 return해야한다. #문제 풀이 Min-heap 풀이: class Solution { public int findKthLargest(int[] nums, int k) { //min-heap PriorityQueue minHeap = new PriorityQueue(); for(int i = 0; i < k;i++){ minHeap.add(nums[i]); } for(int i = k; i < nums.leng..
[Lecture 6] Linking and Loading - Part III #Software Engineering Aspects #Static Libraries 정적 라이브러리(static library) 또는 정적 링크 라이브러리(static-linked library)는 컴파일 시 호출자에서 해결되고 컴파일러, 링커 또는 바인더에 의해 대상 응용 프로그램으로 복사 되어 객체 파일과 독립 실행 파일을 생성하는 일련의 루틴, 외부 함수 및 변수이다. 일반적으로 사용되는 함수를 개체 .o 모듈로 미리 컴파일하고, 그 .o 모듈을 .static 라이브러리라고 불리는 archive로 패키징한다. .a archive는 간단한 순차 archive를 생성하는 ar(1) 명령에 의해 유지 관리된다. 중요: .o 모듈은 archive에 포함되거나 전혀 포함되지 않기 때문에 C 라이브러리(li..
[Lecture 6] Linking and Loading - Part II #Software Engineering Aspects #Local vs Global Symbols 링커의 관점에서, 개별 .o 파일의 기호는 전역적이거나 로컬이다 Assembly level: default값은 local이다. 그렇지 않으면 .globl로 state해야함 C level: default값은 global이다. 로컬로 만들려면 static으로 state해야함 참고: 로컬/글로벌 변수와 로컬/글로벌 변수의 다르게 사용가능. 여기서 "local"은 컴파일 유닛에 대한 로컬, 즉 .c 파일(헤더 포함)을 의미한다 서로 다른 컴파일 단위의 로컬 기호가 분리되고 서로 충돌하거나 다른 단위의 글로벌 기호와 충돌하지 않는다 #Conflict Resolution Rules for Global Symbols 만..
[Lecture 6] Linking and Loading - Part I #Linking and Loading - Big Picture #Compiler and Assembler Preprocessor는 #include 파일들의 텍스트 삽입을 수행한다 컴파일러는 다음과 같은 기호 이름을 확인한다: 로컬 자동 변수 (Local automatic variables), 함수 매개 변수 Field names in structures 어셈블러가 relative branches들에 대한 특정 레이블을 확인한다. 결과로 나온 relocatable .o 파일은 범위가 전역인 모든 함수와 변수에 대한 기호 이름을 유지한다 #Relocatable Object Files – Text Section 여러개의 섹션을 가지고 있음 각 섹션은 0에서 시작하는 것처럼 레이아웃됨 Relocation rec..
[Medium] 49. Group Anagrams (Amazon) #문제 설명 Leetcode 49번 문제에서는 여러개의 문자열이 주어진다. 주어진 문자열로 anagram을 만들수있는 문자열들끼리 묶은 sublist를 담은 list를 return 하는 문제이다. 여기서 anagram이란 주어진 철자들로 다른 단어를 만든다는 뜻이다. 예를 들어 race는 r, a, c, e를 사용해 care라는 단어를 만들수 있다, 이런것들이 anagram이다. 그래서 위에 주어진 예시 1번을 보면 nat을 n,a,t를 사용해 tan를 만들수있기때문에 묶고 (이 문제에서는 말이 안되는 단어여도 상관없다, 모든 문자만 겹치면 anagram으로 침), ate는 a,t,e를 사용해 eat과 tea를 만들수있기 때문에 묶는다, bat으로는 주어진 array의 문자열들의 anagram으론 바꾸지..