프로그래머스 13

프로그래머스 - 숫자 짝꿍

풀이. 이 문제는 두 가지 방법으로 풀어 볼 수 있다. 하나는 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

프로그래머스 - 덧칠하기

나의 풀이. 한 번에 칠할 수 있는 길이는 m이고 다시 칠하기로 한 구역은 적어도 한 번은 페인트칠을 해야하니까 section 배열 안의 요소들이 한번씩만 칠해지는 최소 횟수를 구하면 된다. 어렵다.. section 배열은 오름차순으로 되어 있어 0번째 인덱스의 값이 첫 시작 위치가 되면 된다. 예제 1번을 예로 들면 2부터 한번에 칠할 수 있는 끝인 5가 되어야 하기때문에 end 인덱스를 section[0] + m(칠할 수 있는 길이) 하면 6에서 -1 해야 원하는 길이가 된다. 그럼 다음 section배열 요소에서 5를 넘지 않으면 다시 칠할 필요가 없기 때문에 다음 요소로 넘어간다. section[1]의 값은 3으로 이미 칠해진 범위기 때문에 넘어간다. 다음 section[2]의 경우 6으로 칠해진..

CODING TEST 2023.05.26

프로그래머스 - 전국 대회 선발 고사

나의 풀이. 처음에는 rank 등수로 연산하는 문젠줄 알고 음.. 했다가 위치로 연산하는거 보고 앗차차.. 처음부터 문제파악을 잘못했었다.. rank의 값과 인덱스 번호를 저장하는 2차원 배열을 만들어 주고 rank가 작은 값이 순위가 높으거니까 오름차순으로 sort 이후 새로운 ArrayList를 만들어 attendece에 2차원배열의 [n][1]에 저장되어 있는 인덱스 값을 넣고 true일때 list에 add list 크기가 3이 되면 종료 할 수 있게 해주고 연산해 answer에 더해준다 HTML 삽입 미리보기할 수 없는 소스

CODING TEST 2023.05.26

프로그래머스 - 배열 회전시키기

나의 풀이. 처음에 문제 보고 배열이나 ArrayList만들어서 하나씩 할당해줘야 하다가 양 쪽 끝에서 데이터의 추가 / 삭제 등이 필요할 때 유용한 데크 생각이 났다. 데크는 양쪽에서 삽입과 삭제가 모두 가능한 자료구조로 Doubly-ended Queue 이며 Stack과 Queue를 합친 형태로 이해하면 된다. 그래서 right면 맨 끝의 요소를 빼서 제일 앞에 넣어주고 left면 첫번째 요소를 빼서 맨 끝으로 넣어주면 풀 수 있다. import java.util.ArrayDeque; import java.util.Deque; class Solution { public int[] solution(int[] numbers, String direction) { int[] answer = new int[n..

CODING TEST 2023.05.22

프로그래머스 - 한 번만 등장한 문자

나의 풀이. 이전에 해시맵 공부하면서 풀어본 문제인데 정리겸 다시 한번 작성하려 한다. 해당 문제를 3가지 방법으로 풀어보고 해당 방법에 따른 실행결과도 한 번 비교해보자. 1. 해시맵/해시테이블로 풀기 2. 계수 정렬 방법으로 풀기 3. 중복값이 없고 순서가 있는 TreeSet으로 풀기 1. 해시맵/해시테이블 getOrDefault 메서드를 사용해 문자열을 하나씩 분리하고 key 값으로 매핑하여 value값을 증가시켜준다. 그리고 keySet() 을 돌려 해당 key의 value가 1이면 StringBuilder에 더해주고 이 StringBuilder 를 문자열로 만들어서 다시 배열로 만들어서 sort 해주고 다시 문자열로 반환하기 import java.util.ArrayList; import java..

CODING TEST 2023.05.22