본문 바로가기

전체 글77

[LeetCode] Two Sum (Kotlin) class Solution { fun twoSum(nums: IntArray, target: Int): IntArray { val map = mutableMapOf() for ((i, v) in nums.withIndex()) { if (map.containsKey(target - v)) { return intArrayOf(map[target - v]!!, i) } map[v] = i } return intArrayOf() } } 2022. 12. 2.
Strategy Pattern 전략 패턴 (Strategy Pattern) 템플릿 메서드 패턴은 상속을 통해 문제를 해결했다. 전략패턴은 Context 라는 곳에 변하지 않는 부분을 두고, 변하는 부분을 Strategy 라는 인터페이스에서 구현하도록 하여 상속이 아닌 위임을 통해 문제를 해결한다. 전략 패턴의 의도 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. Context @Slf4j public class Context { private final Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void e.. 2022. 12. 2.
Template Method Pattern 템플릿 메서드 패턴 템플릿 메서드 패턴의 의도 작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기합니다. 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있습니다. 로깅 부분은 변하지 않지만, 비즈니스 로직은 변경. 이 둘을 분리해서 모듈화 해야 한다. @Slf4j public abstract class AbstractTemplate { public void execute() { long startTime = System.currentTimeMillis(); // Logic Start call(); // 상속 // Logic End long endTime = System.currentTimeMillis(); long result.. 2022. 12. 2.
Aspect Oriented Programing (AOP) AOP란? 어떤 메소드의 실행시간을 측정하려는 요구사항이 있다. 처음에는 하나의 메소드의 시간만 측정하면 됐지만, 점점 많은 수의 메소드를 관리해야 했다. 이렇게 되면 코드의 중복이 많아지고 관리가 힘들어진다. 또한 비즈니스 관심사에 필요하지 않은 실행시간 측정이 비즈니스 코드에 섞이게 된다. 이때 필요한게 AOP 이다. 관점 지향 프로그래밍 AOP AOP란 프로그램 구조를 다른 방식으로 생각하게 함으로써 OOP를 보완한다. OOP에서 모듈화의 핵심 단위는 클래스이지만 AOP에서 모듈화의 핵심 단위는 관점(aspect)이다. 관점은 다양한 타입과 객체에 걸친 트랜잭션 관리같은 관심(concern)을 모듈화할 수 있게 한다. crosscutting corncerns: 횡단 관심사 core concerns:.. 2022. 4. 16.
[백준] 구현 - 14503: 로봇 청소기 (Java) https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 구글에 쳐보니까 보통 재귀로 풀어서 반복문으로 푼 내 방법으로 해결하는데 꽤 오래 걸렸다. 내일 우테코 코테인데 못풀고 갈까 걱정했지만 정답 맞추고 시험 볼 수 있어서 기분이 좋다.ㅎㅎ 시뮬레이션은 문제 잘 읽어서 상황만 잘 나누면 80% 해결한 것이라고 생각한다. 2021. 11. 6.
[프로그래머스] DFS - 타겟 넘버 (Java) https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 문제 설명 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3.. 2021. 11. 3.
[백준 알고리즘] 구현 - 16236번: 아기상어 (Java) https://www.acmicpc.net/problem/16236 방금 푼 감시와 비슷했지만 더 어려웠던 것 같다. 내가 푼 프로세스는 Fish 클래스를 만들어 위치와 거리를 저장한다. bfs를 통해 현재 먹을 수 있는 물고기를 구한다. eat() 함수에서는 현재 먹을 수 있는 물고기들 중 가장 우선순위가 높은 물고기를 한 마리만 먹는다. 먹을 수 있는 물고기를 다 먹을 때 까지 무한반복. 주의사항 현재 상어의 위치를 확인했을 때, 물고기를 먹었을 때에는 해당 위치를 0으로 변경 물고기를 현재의 사이즈 만큼 먹어야 크기 1 증가. 2021. 11. 3.
[백준] 구현 - 15683: 감시 (Java) https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 완전탐색에 더 가까운 문제이다. CCTV번호 별로 나눠서 방향에 알맞게 감시영역을 체크해주면 풀리는 문제이다. 처음에는 감시영역을 7로 체크하고 returnView() 메서드를 만들어서 func 메서드의 반복문 마지막에서 감시영역을 다시 0으로 바꿔줬다. CCTV가 여러개일 때 감시영역이 겹쳐 감시가 되고있음에도 0이되어서 배열을 복사해서 해결했다. 또한 CCTV가 없는 경우가 있었다... 2021. 11. 3.
[프로그래머스] 그래프 - 가장 먼 노드 (Java) https://programmers.co.kr/learn/courses/30/lessons/49189 코딩테스트 연습 - 가장 먼 노드 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr 문제 설명 n개의 노드가 있는 그래프가 있습니다. 각 노드는 1부터 n까지 번호가 적혀있습니다. 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 합니다. 가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미합니다. 노드의 개수 n, 간선에 대한 정보가 담긴 2차원 배열 vertex가 매개변수로 주어질 때, 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solutio.. 2021. 8. 2.