[프로그래머스 / 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는 대기 중인 트럭의 무게 배열이다. 핵심은 모든 트럭이 다리에 올라가는 시간이 아니라, 마지막 트럭이 다리를 완전히 빠져나가는 시간을 구하는 것이다.즉, “트럭을 다 올리는..
[ 프로그래머스 / Java ] [1차] 뉴스 클러스터링
·
CS & Algorithm
문제 파악문자열 두 개를 두 글자씩 끊어 다중집합을 만든 뒤, 자카드 유사도를 구하는 문제다.자카드 유사도는 교집합 크기 / 합집합 크기이며, 두 집합이 모두 공집합이면 1로 정의한다.여기서 중요한 점은 일반 집합이 아니라 “다중집합”이라는 것이다.같은 문자열 조각이 여러 번 나오면 그 개수까지 고려해야 한다.또한 영문자만 유효하며, 대소문자는 구분하지 않는다.최종 결과는 자카드 유사도에 65536을 곱하고 소수점 아래를 버린 정수 값이다.접근 방법처음에는 단순히 Set으로 처리하려고 했지만, 이 문제는 다중집합이기 때문에 중복 개수를 저장해야 한다는 점을 깨달았다.따라서 Map 구조를 사용해 각 2글자 조각의 등장 횟수를 카운트하도록 설계했다. 문자열은 먼저 toLowerCase로 모두 소문자로 변환했..
[ 프로그래머스 / Java ] JadenCase 문자열 만들기
·
CS & Algorithm
문제 파악https://school.programmers.co.kr/learn/courses/30/lessons/12951문자열을 JadenCase 형태로 변환하는 문제다.JadenCase는 각 단어의 첫 문자는 대문자, 나머지는 소문자로 만드는 방식이다.주의할 점은:공백이 하나가 아니라 여러 개 연속으로 나올 수 있음문자열 맨 앞이나 맨 뒤에 공백이 있을 수 있음숫자로 시작하는 단어도 존재함공백은 원래 형태 그대로 유지해야 함단순히 단어 단위로 잘라서 처리하면 안 되는 문제였다. 접근 방법처음에는 split(" ")으로 단어를 나눠서 처리했다.하지만 공백이 연속으로 나오는 경우 빈 문자열이 생기고, 이로 인해 substring에서 런타임 에러가 발생했다.그리고 더 중요한 문제는 split 방식은 원래 ..