-
[프로그래머스 / JAVA] 방문 길이 (잘못된 풀이)코딩/코테준비(JAVA) 2025. 1. 31. 13:31
자바 공부와 코딩테스트 준비를 병행할 겸 자바로 코테 준비를 며칠 전 시작했다.
막히거나 틀린 부분이 있더라도, 그냥 그대로 내가 스스로 작성한 부분들을 기록해 두려고 한다.
정답 코드가 아니다. 그냥 미래의 복기용으로 나를 위해 적어둔 기록이다.
(이 사람은 어떻게 실패했는지 살펴보는 용도로도 적합할 것 같다.)
이번 문제는 거쳐간 길의 길이를 구하는 문제였다.
동일한 길을 여러 번 거쳐가더라도 한 번만 카운트하도록 구현하려면, Set 자료구조를 써야 한다는 생각이 제일 먼저 떠올랐다.
내가 실수한 부분은 두가지다.
첫 번째로는, 시작 좌표와 도착 좌표를 HashSet안에 집어넣었어야 했는데, x좌표가 바뀌었을 때는 그냥 시작 x좌표, 도착 x좌표만 집어넣었다. 이렇게 x에 대해서만 집어넣으면 y에 대한 정보가 담기지 않는다. 좌표를 담아야 한다. HashSet에 어떻게 여러 값을 집어넣을까만 고민하다가, 매우 기본적인 부분에서 실수를 했다.
두 번째로는, 시작 좌표와 도착 좌표를 순서 구분 없이 저장해야 한다. (1,1) -> (2,1)이랑 (2,1) -> (1,1)이랑 똑같이 하나의 길로 취급해야 한다. 그런데 이건 자바로 구현하는 방법을 아직 모른다. 그래서 어쩔 수 없이 해답을 찾아봐야 했던 문제였다.
import java.util.HashSet; import java.util.ArrayList; import java.util.Arrays; // 잘못된 코드 class Solution { public int solution(String dirs) { int curX = 0; int curY = 0; int nextX = 0; int nextY = 0; int answer = 0; HashSet<ArrayList<Integer>> borders = new HashSet<>(); for (int i = 0; i < dirs.length(); i++) { char c = dirs.charAt(i); if (c == 'U') { nextY += 1; } else if (c == 'D') { nextY -= 1; } else if (c == 'R') { nextX += 1; } else { // c == 'L' nextX -= 1; } if (Math.abs(nextX) > 5 || Math.abs(nextY) > 5) { // 범위 밖 벗어나기 nextX = curX; nextY = curY; } else { // 정상 동작 if(nextX != curX) { borders.add(new ArrayList<>(Arrays.asList(curX, nextX))); curX = nextX; } else { //nextY != curY borders.add(new ArrayList<>(Arrays.asList(curY, nextY))); curY = nextY; } } } return borders.size(); } }
하루에 한문제 이상 꾸준히 풀자.
실수는 많이 할수록, 더 많이 배울 수 있다.
https://school.programmers.co.kr/learn/courses/30/lessons/49994
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'코딩 > 코테준비(JAVA)' 카테고리의 다른 글
[프로그래머스 / JAVA] 크레인 인형뽑기 게임 (정답 풀이) (0) 2025.02.06 [프로그래머스 / JAVA] 주식 가격 (정답 풀이) (1) 2025.02.02 [프로그래머스 / JAVA] 짝지어 제거하기 (정답 코드) (0) 2025.02.01 [프로그래머스 / JAVA] 올바른 괄호 (정답 코드) (1) 2025.01.31 [프로그래머스 / JAVA] 실패율 (중간에 막힘) (0) 2025.01.28