[프로그래머스] 여행 경로 - Java
·
프로그래머스 알고리즘/Java
https://school.programmers.co.kr/learn/courses/30/lessons/43164 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ⭐️ 중요 포인트1. graph에 출발지와 도착지에 대한 정보를 기록한다. 이 때, isNotUsed와 graph를 따로 정의한 이유는 조건 중 "만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다."라는 조건을 맞추기 위해서 graph의 도착지는 List 형식으로 저장하였다. 다만 그래프를 순회하면서 중복 순회를 방지하기 위해서 값을 저장해야 하는데, 이 때, List.contains() 를 사용하게 되면 한 번 탐색..
[프로그래머스] 아이템 줍기 - Java
·
프로그래머스 알고리즘/Java
https://school.programmers.co.kr/learn/courses/30/lessons/87694 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ⭐️ 중요 포인트1. 사각형의 외부 테두리와 내부를 구별해서 보드를 채워야 한다. (나중에 겹치는 부분을 모두 2로 채우고, 테두리를 1로 설정해서 BFS/DFS를 돌 때 추가적인 체크 없이 1만 따라서 돌 수 있도록 제한하기 위함.)2. 보드에 실제 크기로 선을 따라 칠하면 ㄷ자나 ㄹ자처럼 간격이 좁게 직선이 겹친 구간을 판단하지 못한다. 따라서 2배 업스케일링해서 보드를 칠한 다음에 cnt에서 /2를 한 값을 answer로 출력하도록 해야한다.아래 ..
[프로그래머스] 콜라 문제 - Java
·
프로그래머스 알고리즘/Java
https://school.programmers.co.kr/learn/courses/30/lessons/132267 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr과외학생이 질문한 문제이다. 간단한 수학 계산 문제이다. ⭐️ 중요 포인트1. 내가 가진 빈 병(n)을 a개로 나눈 몫에 b를 곱해 반납하고 새로 얻을 수 있는 병의 개수를 구한다.2. 새로 받은 병의 개수를 answer와 n에 더한다.3. n에는 아까 반납할 때 나누어 떨어지지 않아 반납하지 못한 병의 개수를 더해준다.class Solution { public int solution(int a, int b, int n) { int a..
[프로그래머스] 점프와 순간 이동 - Java
·
프로그래머스 알고리즘/Java
https://school.programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr과외 학생과 같이 풀었던 문제이다. ⭐️ 중요 포인트1. 처음에는 BFS를 통해서 두 가지 (+1, *2)로 조건을 나누어 문제를 해결하려 했다. 그러면 먼저 해당 배열을 선언해야되는데 N은 10억 이하의 자연수로 조건이 주어져있다. 따라서 10억을 배열로 선언하는 것도 불가능하고, Map을 통해서 구현한다 하더라도 시간초과가 날 것이 분명했다.2. 다시 생각해보니 +1과 *2 연산은 -1과 /2 연산으로 변환하여 거꾸로 풀면 해결되는 문제였다.따라서 N..
[프로그래머스] 연속 부분 수열 합의 개수 - Java
·
프로그래머스 알고리즘/Java
https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ⭐️ 중요 포인트1. 일단 3중 포문을 사용해서 완탐으로 문제를 해결할 수 있다.2. 그러나 완탐으로 해결하게 되면 중복된 경우(startIdx가 0부터 시작해서 len이 1, 2, 3, ..., n까지라고 할 때 (1), (1+2), (1+2+3), ... 처럼)가 계산된다.3. 문제는 해결되지만 좀 더 빠른 방법으로 구현하기 위해서 elements의 길이만큼 cache를 선언하여 누적합을 구해 set에 넣으면 중복을 줄일 수 있다.(0번째..
[프로그래머스] 방문 길이 - Java
·
프로그래머스 알고리즘/Java
https://school.programmers.co.kr/learn/courses/30/lessons/49994 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ⭐️ 중요 포인트1. Point와 Edge의 equlas()와 hashCode()를 직접 구현하기(기존의 equals()를 사용하게 되면 내부 값이 같은지 비교하는 것이 아니라 클래스의 주소 값이 같은지(같은 클래스인지) 비교하게 된다.)2. Edge는 방향성이 없으므로 hashCode를 p1과 p2의 합으로 두면 방향이 같아도 서로 같은 edge(객체)라고 인식해 중복을 없앨 수 있다.3. isInRange()로 게임 캐릭터가 다음 움직일 칸..