[프로그래머스 / Java] 연속 부분 수열 합의 개수
·
CS & Algorithm
문제 파악https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr원형 수열에서 만들 수 있는 모든 연속 부분 수열의 합 중, 서로 다른 값의 개수를 구하는 문제다.일반적인 부분 수열이 아니라 “연속”이라는 조건이 있고, “원형”이라 끝과 처음이 이어진다는 점이 핵심이다.또한 같은 합이 여러 번 나올 수 있기 때문에 중복 제거까지 고려해야 한다. 접근 방법처음에는 모든 구간을 직접 구해서 리스트에 넣고 정렬 후 중복 제거를 하려고 했다.하지만 이 방식은 불필요한 연산이 많고, 시간 복잡도도 커진다. 문제를 다..
[프로그래머스 / Java] 신고 결과 받기
·
CS & Algorithm
문제 파악https://school.programmers.co.kr/learn/courses/30/lessons/92334유저 간 신고 기록이 주어지고, k번 이상 신고된 유저는 정지된다.정지된 유저를 신고한 사람들에게 메일이 발송되고, 각 유저가 받는 메일 수를 구하는 문제다. 핵심은 단순히 신고 횟수를 세는 게 아니라,“같은 유저에 대한 중복 신고는 1회만 인정”된다는 조건이었다.결국 중복 제거 + 카운팅 + 조건 필터링 구조로 풀어야 하는 문제였다. 접근 방법처음에는 report를 순회하면서 바로 카운팅하려고 했다.하지만 같은 사람이 같은 사람을 여러 번 신고하는 경우를 처리하기 어려웠다. 그래서 구조를 이렇게 나눴다.신고자 기준 map → 누가 누구를 신고했는지 저장신고 대상 기준 map → 각 ..
[백준 / Java] 패션왕 신해빈
·
CS & Algorithm
문제 파악https://www.acmicpc.net/problem/9375 의상 이름과 종류가 주어지고, 같은 종류의 의상은 하나만 착용할 수 있다.각 테스트케이스마다 서로 다른 조합으로 옷을 입을 수 있는 경우의 수를 구하는 문제다. 핵심은 모든 옷을 나열해서 조합을 만드는 문제가 아니라,종류별로 선택 가능한 경우를 계산해서 전체 경우의 수를 구하는 문제라는 점이었다. 접근 방법처음에는 단순히 n개의 옷에서 조합을 만들어야 하나 고민했는데,그렇게 접근하면 경우의 수가 너무 커져서 비효율적이다. 문제를 다시 보면 중요한 건 “의상 이름”이 아니라 “의상 종류”다.같은 종류에서는 하나만 선택할 수 있고, 아예 선택하지 않는 경우도 존재한다. 그래서 접근을 이렇게 정리했다.각 의상의 종류를 기준으로 개수를 ..
[프로그래머스 / Java] 숫자 야구
·
CS & Algorithm
문제 파악이번 문제는 숫자야구 형태의 인터랙티브 문제였다.숫자를 하나 제출하면 submit 함수가 Strike와 Ball 결과를 문자열로 반환해준다. 예를 들어 "1S 2B"와 같은 형태로 결과가 나오고, 이 결과를 기반으로 정답 숫자를 찾아야 한다.중요한 점은 단순히 숫자를 맞추는 문제가 아니라,제출 결과와 모순되지 않는 후보 숫자만 남기면서 후보 집합을 계속 줄여가는 방식이라는 점이었다. 또한 숫자에는 다음 조건이 있다.4자리 숫자숫자 중복 불가0 포함 불가결국 가능한 숫자 후보를 먼저 만들고, submit 결과와 비교하면서 후보를 줄여가는 문제였다.접근 방법처음에는 어떤 숫자를 어떻게 선택해야 할지부터 막혔다.submit을 호출하면 결과를 얻을 수 있지만, 이 결과를 어떻게 활용해야 하는지가 핵심이..
[프로그래머스 / Java / 자바] 다리를 지나는 트럭
·
CS & Algorithm
문제 파악https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr다리를 지나는 트럭 문제는 단순히 큐를 사용하는 문제가 아니라, “시간의 흐름을 직접 시뮬레이션”해야 하는 문제였다.다리 길이 bridge_length는 트럭이 다리를 건너는 데 걸리는 시간이고, weight는 다리가 동시에 견딜 수 있는 최대 무게다.truck_weights는 대기 중인 트럭의 무게 배열이다. 핵심은 모든 트럭이 다리에 올라가는 시간이 아니라, 마지막 트럭이 다리를 완전히 빠져나가는 시간을 구하는 것이다.즉, “트럭을 다 올리는..
[ 프로그래머스 / SQL ] 없어진 기록 찾기
·
CS & Algorithm
문제 파악https://school.programmers.co.kr/learn/courses/30/lessons/59042입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 조회하는 문제다.정렬 기준은 ID 오름차순이다.핵심은 단순 조인이 아니라, “한 테이블에는 존재하고 다른 테이블에는 존재하지 않는 데이터”를 찾는 문제라는 점이었다.접근 방법처음에는 LEFT JOIN을 쓰긴 했는데, 조건을 반대로 걸어서 틀렸다.입양 기록이 있는 테이블은 ANIMAL_OUTS입소 기록이 있는 테이블은 ANIMAL_INS 문제 조건을 정확히 풀어보면 이렇게 된다.입양 기록은 반드시 있어야 한다.입소 기록은 존재하면 안 된다.그러면 기준 테이블은 ANIMAL_OUTS가 된다.그리고 ANIMAL_I..