목록java (16)
발전하는 개발자가 되자
SRP (단일책임의 원칙: Single Responsibility Principle) 작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임(변화의 축: axis of change)을 수행하는 데 집중되어 있어야 한다는 원칙입니다. 이는 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함을 의미합니다. SRP원리를 적용하면 무엇보다도 책임 영역이 확실해지기 때문에 한 책임의 변경에서 다른 책임의 변경으로의 연쇄작용에서 자유로울 수 있습니다. 뿐만 아니라 책임을 적절히 분배함으로써 코드의 가독성 향상, 유지보수 용이라는 이점까지 누릴 수 있으며 객체지향 원리의 대전제 격인 OCP원리뿐 아니라 다른 원리들을 적용하는 기초가 됩니다. 이 원리는 다른 원리들에 비..
프로그래머스 알고리즘 (java) 도둑질 프로그래머스 (도둑질) 도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다. 각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요. 코드리뷰 조건 1번째 집을 털면 마지막 집은 털지 못한다. 인접한 집은 털지 못한다. 풀이방향 인접한 집을 털지 못하니 1번집을 털 경우와 2번집을 털 경우 그리고 한 칸씩 띄워서 두개의 최대 값을 비교하면 된다 생각하고 문제를 풀었습니다. 하지만 두칸 건널 수도 있다는 경우를 생각..
프로그래머스 알고리즘 (java) 등굣길 프로그래머스 (등굣길) 가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학교가 있는 곳의 좌표는 (m, n)으로 나타냅니다. 격자의 크기 m, n과 물이 잠긴 지역의 좌표를 담은 2차원 배열 puddles이 매개변수로 주어질 때, 학교에서 집까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 return 하도록 solution 함수를 작성해주세요. 코드리뷰 조건 최단거리를 가야하기 때문에 왼쪽 과 아래 밖에 못 움직인다. 웅덩이가 있는곳은 못 지나간다. 풀이방향 이차원 배열을 만들고 웅덩이를 표시하고 거기서부터는 예전 수학시간에 배운 최단거리를 구하는 방법처럼 구해봤습니다. 웅덩이는 -1 로 미리 ..
프로그래머스 알고리즘 (java) 정수 삼각형 프로그래머스 (정수 삼각형) 코드 리뷰 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다. 조건 맨위 부터 아래로 내려가며 숫자를 증가시킨다. 마지막 까지 내려가 가장 큰 수를 반환한다. 풀이방향 현재 위치의 값을 구할 때 이전 값이 필요합니다. 그래서 저는 배열을 만들었고 이전 배열과 현재 배열을 더하는 식으로 접근 했습니다. 그러다 보니 양쪽 끝부분은 가지수가 1개이고 사이 [j] 값 은 이전 [j], [j - 1] 값을 비교해 큰 값을 더했습..
equals 와 == 차이 면접을 보다 equals 와 == 의 차이를 설명해달라는 질문을 들었다. 정말 쉬운 질문 하지만 나는 면접에서 대답을 하지 못했다. 왜 그럴까? 고민을 해보니 머리로는 이해 했지만 머리속의 내용을 풀어 말로 표현 하려니 정리가 안되서 그랬던거 같다. equals() 와 == 는 무슨 차이가 있을까? == 는 객체의 주소값을 비교하게 된다. 그래서 같은 값이라도 주소값이 다르게 되면 다르다고 나온다. 따라서 == 은 int 와 같은 Primitive Type 을 비교할 때 사용한다. equals() 는 개발자가 정의한 논리적인 비교를 하게 된다. import org.junit.Test; import java.util.Objects; import static org.assertj...
프로그래머스 알고리즘 (java) H-index 프로그래머스 (H-index) 코드 리뷰 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주는 문제 입니다. 조건 논문수 = 배열의크기 n 인용 횟수 h 인용횟수가 h 인 논문의 수가 h 이면 통과 반복 횟수 k 풀이 방향 가정 -1 작은수로 정렬 작은수를 기준으로 h 를 선정 k = 배열의 크기 - 기준인 h 의 인덱스 k = h 일 때 까지 반복 가정 -1 문제 h가 바로 통과 함 그럼 내림차순으로 정렬하고 해보자 가정-2 큰수로 정렬 큰수를 기준으로 h 를 선정 k = 배열의 크기 - 기준인 h 의 ..
프로그래머스 알고리즘 (java) 이중 우선순위 큐 프로그래머스 (이중 우선순위 큐) 코드 리뷰 이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다. 이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요. 조건 명령어 높이 I 숫자 큐에 주어진 숫자를 삽입합니다. D 1 큐에서 최댓값을 삭제합니다. D -1 큐에서 최솟값을 삭제합니다. 풀이 방향 string 배열을 split 하였습니다. 우선순위큐를 2개 만들어 오름차순 내림차순으로 초기화 시켜 사용했습니다. split한 String의 [0] 으로 조건을 구분해 동작 시켰습니다. ..
프로그래머스 알고리즘 (java) 디스크 컨트롤러 프로그래머스 (디스크 컨트롤러) 코드 리뷰 각 작업에 대해 [작업이 요청되는 시점, 작업의 소요시간]을 담은 2차원 배열 jobs가 매개변수로 주어질 때, 작업의 요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 처리하면 평균이 얼마가 되는지 return 하도록 solution 함수를 작성해주세요. (단, 소수점 이하의 수는 버립니다) 요청이 그림과 같이 들어온다면 두가지 경우의 수가 있습니다. A → B → C A → B → C 이 때 각 작업의 요청부터 종료까지 걸린 시간의 평균은 10ms(= (3 + 11 + 16) / 3)가 됩니다. A → C → B A → C → B의 순서로 처리하면 각 작업의 요청부터 종료까지 걸린 시간의 평균은 9m..