본문 바로가기

알고리즘47

키패드 누르기(Lv.1) 문제 설명 입출력 예시 요약 1,4,7은 왼손 3,6,9는 오른손 나머지는 가까운 손이 누른다. 풀이 문제 해석 좌표로 생각하고 오른쪽 왼쪽 이동한 칸 수 계산하기 접근 방식 1. 각 번호를 row와 col 형식의 좌표로 구성 → 1번: (0, 0), 2번: (0, 1), ... , 0번: (3, 1) 2. 왼손 오른손의 시작위치 설정 → 왼손: (3, 0), 오른손(3, 2) 3. 1,4,7은 왼손 3,6,9는 오른손 나머진 가까운 손 → 누를 번호와 각 손의 위치를 계산해서 가까운 위치를 해당 번호 좌표로 변경 코드리뷰 import java.util.*; class Solution { class HandPosition {// 손의 위치를 담을 객체 클래스 정의 int row; int col; publ.. 2024. 3. 21.
성격 유형 검사하기(Lv.1) 문제 설명 입출력 예시 요약 4가지 질문 유형에 따른 점수를 계산해서 성격유형 return 풀이 문제 해석 알파벳 순서와 점수에 따라 나눠서 계산하기 접근 방식 1. 질문 유형을 2개로 나누기 → [ RT, CF, MJ, AN ] -> [ R, T, C, F, M, J, A, N ] 2. 점수에 따라 각 알파벳에 해당하는 값 증가 → RT 7의 경우: T + 3 3. 알파벳 순서 고려 → 만약 R과 T의 점수가 같은 경우 R 선택 코드리뷰 import java.util.*; class Solution { public String solution(String[] survey, int[] choices) { HashMap map = new HashMap(); String[] arr = {"R", "T", ".. 2024. 3. 21.
신규 아이디 추천(Lv.1) 문제 설명 입출력 예시 요약 1단계 ~ 7단계에 맞게 new_id 수정하기 풀이 및 코드 리뷰 접근 방식 정규화를 통해 조건에 맞게 수정한다. 소스코드 import java.util.*; class Solution { public String solution(String new_id) { String answer = ""; answer = new_id.toLowerCase();// 1단계. 대문자를 소문자로 변경 answer = answer.replaceAll("[^a-z0-9-_.]", "");// 2단계. 영어소문자, 숫자, '-', '_', '.' 외에 전부 제거 answer = answer.replaceAll("[..]+", ".");// 3단계. 2개 이상의 온점('.')을 하나로 변경 if(a.. 2024. 3. 21.
메뉴 리뉴얼(Lv.2) 문제 설명 입출력 예시 요약 각 order를 course에 해당하는 길이로 조합해서 개수가 가장 많은 조합을 return 풀이 문제 해석 각 order를 알파벳순으로 정렬해서 course에 해당하는 길이로 조합을 만들어 개수가 가장 많은 조합 구하기 접근 방식 1) 알바벳순으로 정렬 → .toCharArray()를 통해 String을 char[]로 변환 후 Arrays.sort(char[])를 통해 알파벳순으로 정렬 2) 재귀함수를 사용해 해당 order를 가지고 조합 구하기 → "AC"와 "CA"는 서로 같으므로 알파벳순으로 정렬 후 조합 구하기 3) 개수가 가장 많은 요소 구하기 → Collections.max(map.values())를 통해 max 구해서 비교 코드 리뷰 import java.uti.. 2024. 3. 19.
개인정보 수집 유효기간(Lv.1) 문제 설명 입출력 예시 요약 주어진 오늘 날짜와 비교해 유효기간이 만료된 약관의 번호를 담은 int 배열 return 풀이 문제 해석 해당 약관의 개월수를 더해 유효기간을 계산하고 오늘 날짜와 비교해서 지났으면 true 아니면 false 접근 방식 1) 약관 개월수를 반영한 유효기간 구하기 → 12보다 큰 경우 year += 1, 약관 개월수 -= 12 → 약관 개월수 더한 후 해당 날짜의 day -= 1 2) 경계값 기준으로 년, 월, 일 세팅 → month가 12보다 크거나 0인 경우 → day가 28보다 크거나 0인 경우 3) 오늘 날짜와 비교해서 유효한지 판단 → LocalDateTime 객체 활용 코드 리뷰 import java.util.*; import java.time.*;// LocalDa.. 2024. 3. 19.
신고 결과 받기(Lv.1) 문제 설명 입출력 예시 요약 k번 이상 신고당한 유저는 이용이 정지되고, 해당 유저를 신고한 유저에게 신고 메일이 발송된다. id_list 순서대로 신고 메일을 받은 횟수를 return 풀이 문제 해석 중복된 신고는 제외하고 신고 받은 횟수로 이용정지 유저를 구하고 해당 유저를 신고한 유저의 value += 1 접근 방식 1) report 중복 제거 → set으로 담아서 중복 제거 2) 이용 정지 유저 구하기 → 신고 받은 유저 map 생성 후 k와 비교해서 set에 저장 3) 이용 정지 유저를 신고한 유저의 value += 1 → report의 요소를 split 해서 [1]번째 index에 해당하는 유저가 신고당한 유저라면, [0]번째 index에 해당하는 유저의 value += 1 코드 리뷰 impo.. 2024. 3. 19.