CODING TEST 28

프로그래머스 - 숫자 짝꿍

풀이. 이 문제는 두 가지 방법으로 풀어 볼 수 있다. 하나는 Hash를 이용한 방법과 하나는 계수정렬 방법 두 개다 풀어보자. 1. Hash 문자열 X와 문자열 Y를 담을 HashMap을 각 각 만들어 getOrDefault 메서드를 이용해 최빈값을 구한다. 우리가 원하는 건 X, Y에서 나오는 공통된 수 중 가장 큰 정수 '9' 부터 '0'까지 순회화면서 각 요소가 두 해시맵에 키가 있을 때 밸류가 작은 값을 스트링빌더에 추가해주고 문자열로 변환한 후 비었을 때 = 공통된 수가 없음 = -1 리턴 0이 여러개 일 때 = 0을 "' 다 바꾸고 빈 문자열이면 = 0 리턴 둘다 해당되지 않으면 answer 리턴 import java.util.HashMap; class Solution { public Str..

CODING TEST 2023.08.11

프로그래머스 - 햄버거 만들기

풀이. 이 문제는 Stack을 사용하면 쉽게 풀 수 있는? 문제 일단 stack 에 ingredient배열을 돌면서 첫번째 요소부터 차례로 push 이후 stack 요소의 갯수가 4이상일 때 들어오는 숫자가 1(빵)이라면 stack.get메서드를 사용해 재료 순서인 1, 2, 3, 1이 맞는지 확인 맞으면 answer++ 해주고 재료비우기 그다음엔 또 push 반복해서 또 다음 조건에 만족하면 반복 아니면 그냥 push... 결국 배열을 끝까지 돌기도 하고 햄버거 완성갯수에 따라 inner for문이 반복되어 숫자가 커질수록 오래 걸리는 감이 있다. import java.util.Stack; class Solution { public int solution(int[] ingredient) { int an..

CODING TEST 2023.08.10

프로그래머스 - 대충 만든 자판

풀이. 처음 문제를 풀었을 때 최소 횟수를 제대로 매핑하지 못해서 테스트 케이스를 많이 틀렸다. 먼저 HashMap map 에 키와 밸류를 매핑해주는데 이때 기존에 키를 가지고 있다면 더 작은 값을 넣어주는게 일단 중요함. 그리고 또 테스트 케이스를 틀리게 했던 부분은 문제 의도를 잘못해석해서 키가 없을 경우 -1을 넣어줘야 하는데 그냥 전체를 -1로 리턴했다.. 가령 keymap 이 ["AA"] 이고 targets가 ["B", "A"] 라면 정답은 [-1, 1]이 되어야 하는데 문제를 잘못 이해해 그냥 [-1]로 리턴한 것. 이 두 부분만 잘 이해하고 넘어갔다면 쉽게 풀 수 있었을텐데 아직 문제 파악이 서툰것 같다. 그래도 끙끙대며 맞추기 성공! import java.util.HashMap; class..

CODING TEST 2023.08.10

프로그래머스 - 다항식 더하기

나의 풀이. - polynomial 문자열을 "+" 기준으로 분리해 배열로 만들기 - "+"는 정규 표현식의 메타 문자이므로, 이 문자를 그대로 인식시키기 위해 이스케이프 문자를 추가 - x의 계수와 일반 숫자항을 담을 변수를 각각 0으로 선언하고 - for each 문으로 polynomial 로 만든 배열을 순회 - "\\+" 기준으로 나누면 앞뒤로 공백이 있을 수 있어 trim() 으로 공백 제거 - foreach 문자열 변수 s가 "x" 를 포함할 때 -> x 를 ""로 교체하면 숫자만 남음 - 빈 값이면 1x이기 때문에 x의 계수 변수에 += 1, 아니면 += 남은 숫자 - x가 포함되지 않은 숫자라면 숫자항 변수에 += 숫자 - StringBuilder를 하나 만들어서 x계수 변수가 1일 때는 ..

CODING TEST 2023.08.01

프로그래머스 - 달리기 경주

풀이 유형 - 해시 해시맵으로 풀어야지 생각은 했는데 자꾸 틀려서 가만보니 원래 배열도 등수에 맞게 변경해줘야되는데 원본 players배열을 계속 불러와서 적용하니 틀리는게 당연 멍총멍총.. ㅋㅋ - 해시맵 담기 - callings 배열을 돌면서 불린 선수를 키로 잡은 등수 가져오기 - 불린 선수는 -1, 원래 등수에 있던 선수는 불린 선수의 등수로 변경 - players도 swap해서 바뀐 등수로 배열 만들어주기 - 마지막에 answer 배열에 담아서 리턴하거나 players 배열 고대로 리턴; import java.util.HashMap; class Solution { public String[] solution(String[] players, String[] callings) { String[] a..

CODING TEST 2023.07.28

프로그래머스 고득점 Kit - 스택/큐 프로세스

풀이. - prioirities 배열의 인덱스와 배열의 요소를 갖는 Process 클래스 생성 - 생성된 Process 객체를 큐에 담기 - 큐가 비어있을 때 까지 while문 돌리기 - 큐 poll() 한 process 객체를 만들고 - for each문을 돌며 process의 priority 와 큐에 존재하는 prioirity를 비교 - process의 priority가 큐에 남아있는 priority 작다면 다시 큐에 offer(process) - process null 변경해주고 for each문 멈춤 - process가 null 이 아니라면 가장 우선순위에 있는 프로세스가 실행되고 종료됨을 의미하기에 - answer++ 하면서 process의 idx와 location을 비교해 일치한다면 answe..

CODING TEST 2023.07.22

기초수학 - 집합(Set)과 관련 코딩테스트 문제들

프로그래머스 - 두 개 뽑아서 더하기. 이중 반복문을 돌려서 각 원소의 합을 set에 넣어준다. set은 순서를 보장하지 않기때문에 배열에 담은 후 sort해준다. HTML 삽입 미리보기할 수 없는 소스 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/68644 프로그래머스 - 폰켓몬 입력받은 배열을 set에 넣어준다. 폰켓몬 종류의 개수와 선택할 수 있는 폰켓몬의 개수 중 작은 값을 선택하면, 가장 많은 종류의 폰켓몬을 선택할 수 있는 방법을 찾을 수 있음 HTML 삽입 미리보기할 수 없는 소스 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/1845 백준 1784번 - 듣보..

CODING TEST 2023.05.31

백준 1890번 - 동전 0

나의 풀이. 첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. 최소 값을 만들려면 동전을 큰 단위부터 비교해 k보다 작거나 같은 동전이 나오면 동전 갯수 += k / 동전 단위; 남은 금액(k) = k % 동전 단위;를 반복해 준다. package day028; import java.util.Scanner; public class ACMICPC11047 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int cnt = 0; // 동전 갯수 int[] arr = new int[n]; for (int i = 0; i < ..

CODING TEST 2023.05.30

백준 2167번 - 2차원 배열의 합

나의 풀이. 처음에 문제를 봤을 때 경로에 대한 합이라고 해서 그 앞에 모든 길을 지나야 접근해 더해준다고 생각했는데 예제 1의 마지막 줄이 음? 아닌데 해서 다시 생각해보니 인덱스 증가에 따른 합을 구해주면 되는 문제였다. 가령 i, j , x, y -> 1, 1, 2, 3 이면 [1][1], [1][2], [1][3], [2][1], [2][2], [2][3] 을 더해주면 된다. 모든 2차원배열의 합이므로 63이 나온다. 1, 2, 1, 2 일 경우에는 [1][2], [1][2] 변함이 없기에 하나의 값만 더해준다. 1, 3, 2, 3 일 경우에는 [1][3], [2][3] 만 더해주면 되서 36이 나온다. 그려가면서 한 40분 고민했던거 같다.... import java.util.Scanner; p..

CODING TEST 2023.05.29

백준 1254번 - 팰린드롬 만들기

나의 풀이. 처음에 접근했을 때 단순하게 문자열 마지막 앞부터 역으로 추가하면서 리버스 한 값이 맞으면 응 팰린드롬이야 라고 생각해서 어찌어찌 코드짜서 예제 3번까지는 성공했으나 마지막 예제 4번에서 거의 두배보다 안되는 수가 계속 나오면서 아 틀린거구나 했다. 도저히 생각이 안나서 다른 분 풀이를 참고 했고 이해하니 충분히 풀 수 있었을텐데 하는 아쉬움은 사실 크게 안들었고 아직 멀었구나 하는 생각은 많이 들었다. 예제 2번을 예로 보면 입력된 문자열 "qwerty" 을 보면 qwerty, 0번째 인덱스부터 문자열 끝까지 -> 팰린드롬인지 아닌지 확인 werty, 1번째 인덱스부터 문자열 끝까지 -> 팰린드롬인지 아닌지 확인 erty, 2번째 인덱스부터 문자열 끝까지 -> 팰린드롬인지 아닌지 확인 끝까..

CODING TEST 2023.05.29