분류 전체보기 22

860. Lemonade Change

문제 레모네이드의 가격은 $5입니다. 손님들은 $5, $10, $20을 낼 수가 있는데, $5보다 큰 금액을 내면은 정확한 거스름돈을 줘야합니다. 여기서 명심해야 할 것은 처음에 가지고 있는 거스름돈은 없습니다. Integer array로 bills을 받게 되는데 bills[i]는 ith 번째 손님이 지불하는 bill을 말합니다. 만약에 고객들한테 정확하게 거스름돈을 줄 수 있으면 true를 반환하고 아니면 false를 반환해야합니다. 조건을 보자면 아래와 같이 정리할 수 있는데요. 초기에 가지고 있는 거스름돈 없음 고객이 낼 수 있는 돈의 종류는 3가지 정확하게 거스름돈을 줄 수 있는지 아닌지 풀이 푸는 방법은 여러가지 일 수 가 있겠는데요. 처음에 생각나는건 HashMap 이였습니다. key 값에 5..

Algorithm/LeetCode 2023.09.13

[Data Structure] List.of()

최근 테스트 케이스를 만들다가 자료 구조의 Mutability 때문에 고생을 한적이 있습니다. 결과를 먼저 얘기하자면 Immutable한 자료구조를 사용해서 이런 결과가 있었기 때문이었죠. 이 이슈의 Root cause는 코드 Implementation에는 ArrayList를 사용하고 테스트 케이스를 만들 때 mock list를 "List.of"를 사용했기 때문이죠. 왜 이런 이슈가 생긴걸까요? List.of() List.of()를 선언하고 class type을 본다면 뭐가 나올까요? ArrayList? LinkedList? 답을 말 하자면 둘 다 아닙니다. ArrayList와 LinkedList는 Collection 프레임워크의 Interface로서 객체를 insert, delete and update..

Java 2023.09.10

[Stream API] map과 flatMap

Stream API. 자바로 개발을 하면 자주 쓰게 되는 API 중 하나입니다. 그리고 map과 flatMap은 stream api와 자주 쓰이는 걸 볼 수 있습니다. 이 두 친구들은 똑같은 type을 return 하지만 어느정도 차이가 있는데요.어떻게 다른지 이 포스트에서 설명해드리겠습니다. Map 공식 Documentation의 정의는 "map은 주어진 함수를 통해 만들어진 결과들을 Stream의 형식으로 return한다는 말인데요." 쉽게 말하자면 Argument로 받은 Function을 stream이 가지고 있는 element의 값을 바꿔주는 겁니다. Example List mapPractice = List.of(1,2,3,4,5); List afterMap = mapPractice.stream(..

Java 2023.08.21

타입스크립트 변수 Types

전 글에서 타입스크립트를 소개 할 때 타입스크립트가 가진 가장 큰 장점 중 하나는 Type을 선언하는 거라고 했습니다. 그러면 그 Type은 어떤 종류가 있을까요? Explicit Type: Boolean, Number and String 다른 프로그래밍 언어를 배웠다면 익숙한 Type 종류들 일겁니다. 타입스크립트은 이 세가지를 이용해서 Explicit 타입을 선언할 수 있는데요. Boolean은 말 그대로 true 혹은 false를 나타내는 type Number는 숫자 String은 문자열을 나타냅니다. 코드는 아래와 같이 작성할 수 있습니다. let college: string = "University of Minnesota"; let year: number = 2022; let binary: nu..

TypeScript와 JavaScript의 차이점

타입스크립트란? 타입스크립트는 마이크로소프트에서 개발한 언어로 자바스크립트의 상위 집합(superset)으로 정의됩니다. 이 말이 무슨 말이냐면 자바스크립트의 문법을 사용할 수 있을 뿐만 아니라 타입(Types)을 개발자들이 정의해서 사용할 수 있게 만들어줍니다. 그러면 왜 타입스크립트를 사용할까요? 자바스크립트는 기본적으로 변수의 타입(Type)이 정의가 안 되는 loosely typed lanuage이 입니다. 그래서 자바스크립트를 가지고 코딩을 하다 보면은 변수가 어떤 타입으로 정의되어있는지 이해가 어려운 경우가 많은데요. 사실 저는 이런 점을 굉장히 편한다고 생각을 했었는데, 개발 규모가 커지고 다른 사람이 쓴 코드를 봐야 되는 경우가 많을 때 굉장히 불편하게 다가오더라고요. 특히나 함수의 매개변..

REST API란 뭘까요?

REST API는 Representational State Transfer의 줄임말로서 소프트웨어 아키텍처 스타일 중 한 방식입니다. 이 스타일을 따라서 아키텍쳐를 짜려면 6가지 원리를 지켜야합니다. 1. 클라이언트-서버 (Client-Server) 클라이언트-서버라는 건 리소스를 관리하는 서버가 존재하고 다수의 클라이언트가 리소스를 소비하려고 네트워크를 통해 서버에 접근하는 구조를 의미합니다. 그래서 우리는 클라이언트와 서버를 분리시켜서 개발할 수 있는데요. 이렇게 되면 클라이언트 혹은 서버 컴포넌트의 기능을 업데이트 하더라도 다른 한쪽을 똑같이 바꿀 필요가 없게 됩니다. 여기서 리소스란 REST API가 리턴할 수 있는 모든 것들을 의미합니다. (Ex. JSON, HTML, Data etc.). 2...

Back End 2022.01.30

134. Gas Station

문제 n개의 주유소가 순환 루트에 있다. 주어진 Gas와 Cost를 사용해서 한 바퀴를 돌 수 있는 인덱스를 찾기 만약에 없다면 -1 리턴하기. 해결방법 계속 여행을 할 수 있는 조건은 gas[i] - cost[i+1]가 0보다 클 때 그래서 모든 gas[i] - cost[i+1]를 더한 값이 0 보다 작으면 -1 그렇지 않을 경우에는 한 바퀴를 돌 수 있다. 그리고 gas[i] - cost[i+1]의 값과 잔여 연료의 값을 더 했을 때 0 보다 큰 값이 나오면 거기서부터 한 바퀴를 돌 수 있다. int fuel = 0; int size = gas.length; for (int i = 0; i < size; i++){ fuel += gas[i] - cost[i]; } if (fuel < 0) { retu..

Algorithm/LeetCode 2022.01.26

605. Can Place Flowers

문제 화단에서 꽃 몇 송이를 심을 수 있는가? 화단에 심은 꽃이 n보다 같거나 작은가? 해결방법 세가지 인덱스의 값을 비교하면서 n을 줄여나가기 n이 만약 0 보다 크다면 false 작으면 true. public class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { for(int i = 0; i = flowerbed.length ? 0 : flowerbed[i+1]; int curr = flowerbed[i]; if(pre == 0 && post == 0 && curr == 0) ..

Algorithm/LeetCode 2022.01.19

오버라이딩(Overriding) vs. 오버로딩(Overloading)

오버라이딩 vs. 오버로딩 이름이 비슷해서 자주 헷갈리는 경우가 많아서 이 포스트로 개념을 정리하고자 합니다. 오버라이딩 (Overriding) 객체 지향 언어에서 오버라이딩은 상속과 관련이 되어있습니다. Child 클래스들은 Parent class에서 정의된 method들을 사용 할 수 있는데 이런 것들은 inherited method라고 불립니다. 혹은 child 클래스가 parent class의 method와 똑같은 이름, parameter, return type을 가지고 있으면 overriding method 라고 불립니다. Overriding의 이런 특성은 다형성 (polymorphism)에 속합니다. 정리하자면 Parent class에 선언된 method의 이름, parameter, retur..

Java 2022.01.13