https://leetcode.com/problems/shortest-path-to-get-all-keys/ Shortest Path to Get All Keys - LeetCode Can you solve this real interview question? Shortest Path to Get All Keys - You are given an m x n grid grid where: * '.' is an empty cell. * '#' is a wall. * '@' is the starting point. * Lowercase letters represent keys. * Uppercase letters represent lock leetcode.com 친구의 추천으로 리트코드 문제를 처음 풀어보았다..
개발일기(23.6.27) 비교적 빠른 일자에 개발일기를 작성한다. 방학이 시작된지 1~2주 정도 되었다. 현재 나는 자바, 스프링을 위주로 다시 학습하고 있다. 자바는 저번에 말했듯이 구현을 통해 내가 이론을 알았지만 실제로 적용하며 느끼는 것이 많았다. 이는 바로 아래 포스팅에 자세하게 적어두었다. https://kimtaesoo99.tistory.com/222 [JAVA] 블랙잭을 구현하면서 배운 점 평소에 자바를 어느 정도 잘 안다고 생각하였지만, 실제 어떠한 요구사항이 있었을 때 이를 구현하는데 생각보다 어렵다는 것을 느꼈다. 기본기가 매우 중요하고 자바를 이론으로 아는것과 실 kimtaesoo99.tistory.com 현재는 다른 구현을 통해 자바를 더 학습하고 있다. 현재 진행 중인 구현도 완..
평소에 자바를 어느 정도 잘 안다고 생각하였지만, 실제 어떠한 요구사항이 있었을 때 이를 구현하는데 생각보다 어렵다는 것을 느꼈다. 기본기가 매우 중요하고 자바를 이론으로 아는것과 실제 적용하며 몸으로 깨닫는 것은 매우 큰 차이가 있기에, 평소에도 도움을 많이 받는 친구에게 코드리뷰를 받으며 블랙잭을 구현해 보았다. 그 과정에서 내가 느끼고 배운 것을 정리하려고 이 글을 작성한다. 배운 점 기본적인 자바 컨벤션, 클린코드, 네이밍 평소에도 이론적으로는 어느 정도 알고 있다고 생각하였지만, 스스로가 많이 놓치고 있는 부분이었다. 개행을 어느 부분에서 해야 하고, 메서드 순서를 어떤 식으로 해야 하는지에 대해 무지했던 것이다. 우선 개행의 경우 변수를 선언할 때 접근자가 달라지거나 final 키워드의 유무에..
기존에서는 데이터 센터를 직접 구축하고, 서버, 스토리지, db, 네트워크 시스템을 구축하고 소유하며 운영 관리해야했다. (시간과 노력이 많이 필요함) 클라우드는 인터넷을 통해 IT리소스나 애플리케이션을 필요시에 사용하고 사용한 만큼만 비용을 지불하고 사용하는 서비스(관리나 운영에 대해 신경쓸 필요가 없음) 클라우드는 구름 즉 인터넷을 통해 원격지에 있는 IT리소스를 이용하는 서비스다 클라우드 컴퓨팅에서는 인프라르 더 이상 하드웨어라고 생각하지 않고 소프트웨어라고 생각하고 사용할 수 있다. IT 인프라를 프로그래밍 가능한 리소스로 사용하면 기존의 방식과는 다른 방법으로 빠르게 인프라를 구축하고 해체할 수 있다 이러한 리소스에 액세스하여 보다 다이나믹하게 혁신을 만들어 갈 수 있다. 더 큰 용량, 높은 컴..
최소 신장 트리 •트리(Tree)는 싸이클이 없는 연결 그래프, n개의 정점(vertex)을 가지는 트리는 n-1개의 간선(edge)을 가짐 •신장 트리(Spanning Tree)는 그래프 G(V,E)에서 정점 집합 V를 그대로 두고 간선을 |V|-1개만 남겨 트리가 되도록 만든 것 (|V|=n) •너비 우선 트리와 깊이 우선 트리도 신장 트리 •간선 가중치의 합이 가장 작은 트리를 최소 신장 트리 (Minimum Spanning Tree, MST)라 함 -> 최소 신장 트리를 대표하는 알고리즘으로는 프림 알고리즘과 크루스칼 알고리즘이 존재한다. 프림 알고리즘(Prim’s Algorithm) 프림 알고리즘은 로버트 프림(Robert C. Prim)이 만든 최소 신장 트리 알고리즘이다. 프림 알고리즘은 최..
리플렉션(Reflection)이란? 리플렉션은 구체적인 클래스 타입을 알지 못하더라도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API를 말하며, 컴파일 시간이 아닌 실행 시간에 동적으로 특정 클래스의 정보를 추출할 수 있는 프로그래밍 기법이라 할 수 있다. 언제 사용할까? 동적으로 클래스를 사용해야 할 때 사용한다. 다시 말해, 작성 시점에는 어떠한 클래스를 사용해야 할지 모르지만 런타임 시점에서 가져와 실행해야 하는 경우 필요하다. 프레임워크나 IDE에서 이런 동적 바인딩을 이용한 기능을 제공한다. 리플렉션을 통해 알 수 있는 정보 Class Constructor Method Field 리플렉션 예시 public class Parent { private String str1 ..
https://school.programmers.co.kr/learn/courses/30/lessons/67259 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr bfs를 활용한 문제이다. 뿐만 아니라 각 거리의 최솟값도 알아야 하므로 dp의 개념도 필요하다. 핵심 일반 bfs와 다른 점은 이건 이전에 방향이 어디를 향하고 있는지가 중요하다. 직진을 하다가 좌회전이나 우회전을 할 경우 가중치가 달라지기 때문이다. 또한 기본적으로 방문한 곳은 다시 방문하지 않는 것이 일반적이지만, 더욱 작은 값으로 갈 수 있다면 그 값을 들고 다시 방문한다. 정답 코드 im..
객체지향 프로그래밍의 5가지 설계 원칙, SOLID SOLID란 객체 지향 프로그래밍을 하면서 지켜야 하는 5대 원칙으로 각각 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)의 앞글자를 따서 만들어졌다. SOLID 원칙을 철저히 지키면 시간이 지나도 변경이 용이하고, 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 되는 것으로 알려져 있다. SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open Closed Priciple): 개방 폐쇄 원칙 LSP(Listov Substitution Priciple): 리스코프 치환 원칙 ISP(Interface Segregat..
불변 객체(Immutable Object)란? 불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. 불변 객체는 read-only 메소드만을 제공하며, 객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다. Java의 대표적인 불변 객체로는 String이 있다. String name = "Immutable"; name.toCharArray()[0] = 'A'; System.out.println(name); //Immutable Java의 String은 불변 클래스이기 때문에 위와 같이 String 내부의 char형 배열을 얻어 수정하여도 반영이 되지 않는다. Java에서는 배열이나 객체 등의 참조(Reference)를 전달한다. 그렇기..