본문 바로가기

알고리즘/PROGRAMMERS42

완주하지 못한 선수(Lv.1) 문제 설명 입출력 예시 요약 참가했는데 완주하지 못한 선수의 이름 찾기 풀이 접근 방식 1. 참가자 map 만들어서 완주자 배열에 없는 이름 찾기 → hashmap과 keySet() 활용 코드리뷰 import java.util.*; class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; HashMap part = new HashMap(); for(String str : participant) { part.put(str, part.getOrDefault(str, 0) + 1);// map에 getOrDefault를 통해 기본 value = 1로 세팅 } for(String s.. 2024. 3. 21.
소수 찾기(Lv.2) 문제 설명 입출력 예시 요약 주어진 숫자로 조합해서 만든 숫자가 소수인지 판별 풀이 문제 해석 각 숫자로 만들 수 있는 모든 숫자 만들어서 소수인지 판별 접근 방식 1. 모든 숫자 조합 구하기 → 순열에 가까운 조합방식으로 재귀함수를 통해 숫자 조합을 구한다. 2. 소수 판별 → 0과 1을 제외한 숫자 중, 2 ~ (해당 숫자-1)과 나눴을 때 나머지가 0이면 소수가 아님 → '에라토스테네스의 체'를 통해 해당 숫자의 제곱근까지만 반복문 실행 코드리뷰 import java.util.*; class Solution { HashSet set = new HashSet(); public boolean isPrime(int num) {// 소수인지 판별하는 메소드 boolean result = true; int .. 2024. 3. 21.
크레인 인형뽑기 게임(Lv.1) H3 중제목 입출력 예시 요약 바구니에 2개의 같은 인형이 위치하면 사라짐 풀이 문제 해석 넣기 전 바구니의 개수가 1개 이상일 경우, 뽑은 인형과 비교해서 같으면 넣지 않고 바구니의 담긴 마지막 인형 제거 접근 방식 1. moves = col+1로 생각 → 열의 번호(moves[i])가 1번부터 시작 2. moves[i]에 해당하는 열의 row를 최대 배열 크기만큼 순회 → 0은 인형이 없는 것을 뜻하기 때문에 0이 아닐때까지 반복해서 찾는다. 코드리뷰 import java.util.*; class Solution { public int solution(int[][] board, int[] moves) { int count = 0; List list = new ArrayList();// 바구니로 사용할.. 2024. 3. 21.
키패드 누르기(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.