본문 바로가기

정리/알고리즘53

프로그래머스 - 행렬 테두리 회전하기 프로그래머스 - 행렬 테두리 회전하기 해당 문제는 start X, Y 좌표 및 end X,Y좌표를 통해 시계방향으로 회전 시키도록 하면서 회전하는 값들의 최소값을 구했습니다. 다른 공식이 있느지는 모르겠지만 입력받은 각 x1,y1, x2,y2 좌표를 통해 사각형 테두리 좌표를 각각 구할 수 있었고, (x1, y1) -> (x1, y2), (x1, y2) -> (x2, y2), (x2, y2) -> (x2, y1), (x2,y1) -> (x1,y1) 순으로 각 좌표의 값들을 해당 방향으로 움직마지막 값은 temp에 넣은후 다음 방향의 첫번째 값으로 셋팅하면서 움직이게 하는 식으로 구현했습니다. 값을 움직이게 하기 위해 모든 대상 좌표를 방문하므로 그 값들의 최소값을 return 했습니다. public in.. 2022. 5. 16.
프로그래머스 - 카카오 프렌즈 컬러링북 프로그래머스(DFS) - 카카오 프렌즈 컬러링북 해당 문제는 입력받은 picture의 color 영역의 수와 영역의 최대값을 구하는 문제였습니다. 처음 문제를 봤었을때 DFS 알고리즘 처럼 탐색해 나가는데, basecase는 색깔이 다르거나 방문한 영역인 경우로 산정 하였습니다. 다음 탐색 영역으로는 오른쪽과 아래쪽 영역만 선택하여 DFS을 하도록 하고 초기 테스트 케이스를 통과하였지만 이후 채점 했을 경우에는 통과하지 못했습니다. 어피치의 그림이 그려진 영역을 보면 고민한 결과 시작한 영역의, 상/하/좌/우로 DFS를 진행해야 한다는 것을 알수 있었습니다. public int[] solution(int m, int n, int[][] picture) { boolean[][] visited = new b.. 2022. 5. 13.
프로그래머스 - 다트 게임 프로그래머스 - 다트 게임 해당 문제는 큐와 스택을 통해 풀 수 있었습니다. 계산할 숫자와 부호를 문자열에서 분리해 큐에 넣은 뒤 큐에서 데이터를 가져오면서 숫자인 경우에는 스택에 데이터를 넣고 그외 부호인 경우 규칙에 맞게 이전값을 2배로 한다거나 값을 음수로 바꾸거나 하는 로직을 거쳐 최종적으로 스택의 담긴 모든 값을 더해주며 답을 구했습니다. public int solution(String dartResult) { int answer = 0; Queue dartQueue = new LinkedList(); Stack dartStack = new Stack(); String temp = ""; for (int i = 0; i < dartResult.length(); i++) { char tempCha.. 2022. 5. 2.
프로그래머스 - 삼진법 뒤집기 프로그래머스 (월간 코드챌린지 시즌1) - 삼진법 뒤집기 해당 문제는 진법으로 변환할 때 스택에 넣고 꺼내는 식으로 진법을 구할 수 있는데 이를 뒤집어야 하므로 반대로 큐를 통해 해당 문제를 풀었습니다. public int solution(int n) { Queue queue = new LinkedList(); while(n > 0) { queue.add(n % 3); n = n / 3; } int answer = 0; while(!queue.isEmpty()) { answer += (queue.poll() * Math.pow(3, queue.size())); } return answer; } 2022. 4. 20.