(Java) 프로그래머스 - 괄호 회전하기
·
코딩 테스트
예전에 풀었던 괄호 변환 문제와 비슷했지만 조금 더 복잡한 문제였다. 전체적인 문제 난이도는 쉬운 편이었던 것 같다. 제목이 괄호 회전이라 90도씩 돌리는줄 알았는데 왼쪽으로 한 칸씩 미는 문제였다. 문자열을 이동하는 메서드와 올바른 괄호인지 확인하는 메서드 2개로 로직을 짠뒤 한 번에 성공했다. 다만 코드가 쓸데없이 늘어나는것 같아서 풀면서도 마음이 불편했다. 그래서 괄호의 짝 세는 부분이 필요 없는 것 같아 지우고 리팩터링 했다. 실행 시간은 약간 더 빨리 지긴 했는데 거의 의미 없는 수준이다. 최초 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Stack; class Solution { static int cnt; ..
(Java) 프로그래머스 - 전력망을 둘로 나누기
·
코딩 테스트
그리 어렵지 않은 문제라고 느껴져서 금방 풀 줄 알았는데 wires로 인접 행렬을 만드는 부분에서 조금 시간이 걸렸다. 1. 인접 행렬 만들기 2. 선 하나씩 끊으면서 bfs 탐색 으로 로직이 간단하다. 최종 코드 import java.util.LinkedList; import java.util.Queue; class Solution { static int[][] arr; public int solution(int n, int[][] wires) { int answer = Integer.MAX_VALUE; // 인접 행렬 만들기 arr = new int[n + 1][n + 1]; for (int i = 0; i < wires.length; i++) { arr[wires[i][0]][wires[i][1]]..
(Java) 프로그래머스 - 후보키
·
코딩 테스트
카카오 문제 치고 문제 설명이 짧아서 쉽게 풀 수 있을 줄 알았는데 꽤나 오래 걸렸다. 데이터 베이스를 공부한 지 오래되어서 후보키의 개념이 생각나지 않았지만 문제 설명을 보고 빠르게 이해했다. 처음에는 먼저 컬럼을 탐색해서 중복이 없다면 조합을 만드는 로직으로 생각했으나 그게 더 복잡한 것 같아서 모든 조합을 만들고 유일성과 최소성을 검사하는 로직으로 구현했다. 매끄럽게 풀었던 문제가 아니라서 조금 찝찝한 느낌이 있다. 기억이 나지 않을 때쯤 다시 풀어봐야겠다. 최종 코드 import java.util.*; class Solution { static int answer; static int n,m; static List candidateKey; static String[][] relationCopy; ..
(Java) 프로그래머스 - 모음사전
·
코딩 테스트
문제는 L2에 맞지 않게 너무 쉬웠다. 재귀를 사용할수만 있다면 바로 풀리는 문제다. 원래는 str이 word와 같다면 메서드를 바로 종료하고 싶어서 밑과 같이 작성했지만 모든 사이클을 무조껀 돌아야 했다. if(word.equals(str)) { answer = cnt; return; } if(depth == 5) { return; } 그래서 그냥 모든 조합을 list에 넣고 선형 탐색으로 답을 구했다. 모든 조합을 다 해봐야 3600개쯤 밖에 안되니 시간 초과가 나진 않을 것 같았다. 최종 코드 import java.util.ArrayList; import java.util.List; class Solution { static String[] arr; static List list; public in..
(Java) 프로그래머스 - 예상 대진표
·
코딩 테스트
문제가 꽤 쉬운 편이었다. 특정 알고리즘을 사용하는 것도 아니라서 그냥 문제에 나온대로 코드로 구현했다. 처음에는 HashMap을 이용해서 한번 대진을 돌고나면 새로 번호를 부여하려고 했는데 다시 생각해보니 불필요할 것 같아서 메서드를 수정했다. 최종 코드 class Solution { public int solution(int n, int a, int b) { int answer = search(n, a, b); return answer; } // 대진 진행 메서드 static int search(int n, int a, int b) { int first = 0; int second = 0; // while문 탈출을 위한 a, b 대소 빅교 if (a > b) { first = b; second = a..
(Java) 프로그래머스 - 순위 검색
·
코딩 테스트
카카오 문제답게 어려운 문제였다. 정확성은 통과하기 쉬웠으나 효율성을 통과하긴 어려웠다. 점수 배점이 정확성에 40점 효율성에 60점이니 효율성을 통과하지 못하면 0.5솔도 못하는 것이다. 처음에는 info와 query 배열로 들어온 정보들을 인스턴스로 만들어 하나씩 비교하려고 했다. info값이 50,000 이하, query값이 100,000 이하니 선형 탐색으로 둘을 비교할 시 시간 초과가 날것을 예상했지만 다른 방법이 떠오르지 않아 선형 탐색으로 풀었다. 인스턴스를 150,000개나 만들어 중첩 if문으로 탐색하는 코드를 만드니 메모리가 초과될 수도 있고... 애당초 비교를 위해서 인스턴스를 만드는게 아닌 것 같다는 생각을 했다. 메모리 초과는 일어나지 않았지만 효율성에서 통과하지 못했고 다른 방법..
(Java) 프로그래머스 - 멀쩡한 사각형
·
코딩 테스트
알고리즘 문제보다 수학 문제 같았다. 문제 풀이 방법에는 두 가지가 있다. 첫 번째는 규칙을 찾아 푸는 방법이고 두 번째는 기울기를 이용해서 푸는 방법이다. 나는 규칙을 찾아가면서 풀었지만 기울기를 이용한 방법이 더 간편해 보인다. 입력값이 int로 주어지고 w와 h값이 각각 1억 이하의 자연수이기 때문에 사용할 수 없는 사각형 계산을 하면서 인티저 오버플로가 발생할 수 있다. 따라서 입력값을 전부 long으로 형 변환 후 계산했다. 또한 최대 공약수가 1억을 넘을수는 없기 때문에 int로 선언했다. 최대 공약수를 구하는 방법도 세 가지가 있는데 첫 번째는 w와 h를 BigInteger로 변환하고 BigInteger에 내장된 gcd를 사용하는 방법 두 번째는 재귀를 이용한 유클리드 호제법 세 번째는 반복..
(Java) 프로그래머스 - 게임 맵 최단거리
·
코딩 테스트
문제를 보고 처음에 아주 신이 났었다. 딱히 생각하지 않고 바로 풀 수 있는 BFS문제였기 때문이다. 문제를 제대로 읽지 않고 10분도 안돼서 코드 작성을 마쳤고 테스트를 돌리는데 몇 개의 케이스를 제외하고서 모두 틀렸고 심지어 런타임 에러도 났다. 30분 넘게 고민을 해도 답이 나오지 않았고 1시간이 다 돼서야 n과 m의 크기가 가변적이라는 걸 발견했다. 문제 예시에서 5X5 배열만을 이야기해서 모든 변수를 5로 고정하고 풀었으니 당연히 틀릴만했던 거다. 저번에도 이런 경우가 꽤 있었는데 오늘은 정말 허탈했다.... 문제를 제대로 읽자.... 최종 코드 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; class ..
(Java) 프로그래머스 거리두기 확인하기
·
코딩 테스트
문제를 읽고 전형적인 DFS / BFS 문제라고 생각했다. 다만 DFS / BFS를 구현하는 부분이 조금 막혔다. 그래서 모든 경우의 수를 나누어 먼저 풀어보았고 BFS를 이용해서 다시 풀어 보았다. 모든 경우의 수를 나눈 방법은 BFS를 이용했을 때보다 시간이 훨씬 적게 걸렸다. 다만 코드의 길이가 좀 길고 거리가 2인 확인과 대각선 확인의 로직이 복잡해 장단점이 있는 것 같다. 최종 코드 (모든 경우) class Solution { public int[] solution(String[][] places) { int[] answer = new int[5]; for (int i = 0; i < places.length; i++) { String[] temp = places[i]; boolean check..