(Java) 프로그래머스 - 이모티콘 할인행사
·
코딩 테스트
문제를 읽고 대략적인 로직은 빠르게 세워졌지만 구현에는 꽤 많은 시간이 소요되었다. 인풋 값이 크지 않아서 시간 초과는 생각하지 않고 풀었다. 먼저 가능한 할인 조합을 만들고 users 배열과 emoticons 배열을 순회하며 계산후 result 배열에 담고 정렬해주었다. 총 1시간 정도 걸렸는데 풀이 시간을 더 빠르게 하고 싶다... 최종 코드 import java.util.*; class Solution { static List list; static int[] dis = new int[] {10,20,30,40}; public int[] solution(int[][] users, int[] emoticons) { int[] answer = new int[2]; list = new ArrayList(..
(Java) 프로그래머스 - 택배상자
·
코딩 테스트
문제 설명부터 Stack을 쓰라고 말하는 것 같았다. 메인 컨베이어 벨트는 Queue로 서브 컨베이어 벨트는 Stack을 이용해서 풀이했다. 90% 풀이 금방 끝냈지만, while문의 종료 조건을 생각하느라 시간이 걸렸다. flag 변수를 이용해서 어떠한 작업도 하지 않는다면 while문을 종료시켜 풀이에 성공했다. 최종 코드 import java.util.*; class Solution { public int solution(int[] order) { int answer = 0; Stack stack = new Stack(); Queue queue = new LinkedList(); for(int i = 1; i
(Java) 프로그래머스 - 롤케이크 자르기
·
코딩 테스트
문제가 간단하지만 시간 제한을 맞추는게 꽤 까다로웠다. 인풋값이 크기 떄문에 O(n^2) 로직은 무조건 시간 초과가 나고, O(n log n) 이내로 작성해야 된다고 생각해서 최종적으로 O(n) 로직으로 풀이에 성공했다. 실패 코드 import java.util.*; import java.util.stream.Collectors; class Solution { public int solution(int[] topping) { int answer = 0; for(int i = 1; i < topping.length; i++) { Set set1 = Arrays.stream(Arrays.copyOfRange(topping, 0, i)) .boxed() .collect(Collectors.toSet()); S..
(Java) 프로그래머스 - 숫자 변환하기
·
코딩 테스트
처음에는 DFS를 이용해서 탐색하는 로직을 시도했다. 그러나 너무 많은 재귀 호출로 인한 스택 오버플로우와 시간 초과가 났다. 최소횟수를 찾는것과 최단거리를 찾는것이 똑같다는 생각이 들어 BFS로 변경했다. 더이상 스택 오버플로우는 나지 않았지만 시간 초과가 나는건 똑같았다. 한참을 고민하다 방문 배열과 똑같은 역할을 하는 Set을 추가해서 문제를 해결할 수 있었다. 최종 코드 import java.util.*; class Solution { public int solution(int x, int y, int n) { int answer = 0; answer = bfs(x, y, n); return answer; } public int bfs(int x, int y, int n) { Queue queue..
(Java) 프로그래머스 - 뒤에 있는 큰 수 찾기
·
코딩 테스트
제한사항을 보고 O(n^2) 로직으로는 100% 시간 초과가 날 것이라고 생각했다. 그래서 O(n) Queue를 이용한 로직을 한참 고민했는데, 결국 해결하지 못해 검색을 통해 힌트를 얻어 해결했다. 최종 코드 import java.util.*; class Solution { public int[] solution(int[] numbers) { int[] answer = new int[numbers.length]; Stack stack = new Stack(); for (int i = numbers.length - 1; i >= 0; i--) { while (!stack.isEmpty()) { if(stack.peek() > numbers[i]) { answer[i] = stack.peek(); brea..
(Java) 프로그래머스 - 연속 부분 수열 합의 개수
·
코딩 테스트
처음에는 단순히 슬라이딩 윈도우를 사용해서 풀려고 시도했다. 그러나 부분 수열의 크기가 고정되어 있지 않아서 풀이에 많은 시간이 걸렸다. 최종 코드 import java.util.*; class Solution { public int solution(int[] elements) { int answer = 0; // 부분 수열 크기 int size = 1; Set set = new HashSet(); // 부분 수열 크기가 elements 길이가 될때까지 반복 while (size
[데이터베이스 개론] Chapter6 - 관계 데이터 연산
·
Database
관계 데이터 연산의 개념 관계 데이터 모델에서 연산은 원하는 데이터를 얻기 위해 릴레이션에 필요한 처리 요구를 수행하는 것으로 데이터 언어의 역할을 한다. 연산은 관계 대수와 관계 해석으로 나뉘는데 관계 대수는 원하는 결과를 얻기 위해 데이터의 처리 과정을 순서대로 기술하는 것이고, 관계 해석은 원하는 결과를 얻기 위해 처리를 원하는 데이터가 무엇인지만 기술하는 것이다. 관계 대수와 관계 해석은 기능과 표현력은 동등하기 때문에 관계 대수로 기술된 요구를 관계 해석으로 변환할 수 있고, 그 반대로 변환할 수 있다. 데이터에 대한 처리 요구를 질의라고 한다. 관계 대수와 관계 해석은 실제로 사용되지는 않는 개념적 언어이지만 새로운 데이터 언어를 검증하는데 쓰인다. 관계 대수와 관계 해석으로 기술할 수 있는 ..
(Java) 프로그래머스 - 공원 산책
·
코딩 테스트
추가된 1단계 문제중 가장 정답률이 낮은 문제였다. 전형적인 그래프 탐색 문제였는데, 한칸씩 이동하며 조건을 검사해야 했지만 한번에 n칸씩 이동한다는걸 뒤늦게 깨닫고 수정하느라 풀이 시간이 많이 늘어났다. 최종 코드 import java.util.*; class Solution { static int startX; static int startY; public int[] solution(String[] park, String[] routes) { int[] answer = new int[2]; // 동서남북 이동할 좌표 map에 삽입 Map map = new HashMap(); map.put("N", new int[]{-1, 0}); map.put("E", new int[]{0, 1}); map.put(..
[데이터베이스 개론] Chapter5 - 관계 데이터 모델
·
Database
관계 데이터 모델의 개념 관계 데이터 모델의 용어 속성 릴레이션의 열을 속성 또는 에트리뷰트라고 부른다. 릴레이션은 파일 관리 시스템의 파일, 속성은 필드에 대응한다. 투플 릴레이션의 행을 투플이라고 부른다. 릴레이션에서 투플은 개체의 인스턴스이며 파일 관리 시스템에서 레코드에 대응한다. 도메인 속성 하나가 가질 수 있는 모든 값의 집합을 해당 속성의 도메인이라 한다. 관계 데이터 모델에서는 더는 분해할 수 없는 원자값만 속성으로 사용할 수 있다. 도메인은 가능한 값을 일일이 나열하기 어려운 경우가 많으므로 속성을 고려한 데이터 타입으로 정의한다. (등급 속성 : vip, gold, silver, bronze -> 고객 아이디 : CHAR(20)) 또한, 도메인을 타입으로 정의하면 연산 가능 여부를 쉽게..