(Java) 프로그래머스 숫자 문자열과 영단어
·
코딩 테스트
문제를 보고 한 글자씩 다 잘라서 만드는 것 말고는 다른 방법이 떠오르지 않았다. split를 이용해서 한글자씩 자르고 리스트로 변환한다. 그리고 switch / case로 원하는 문자열이 만들어지면 임시 배열인 sb에 넣고 sb를 int로 변환해 리턴한다. 다른 분 코드를 보니 replaceAll을 사용해서 간단하게 풀었는데 왜 저 생각을 못했지...? 최종 코드 import java.util.ArrayList; import java.util.Arrays; import java.util.List; class Solution { public int solution(String s) { int answer = 0; // answer로 변환하기 전 String 변수 String sb = new String(..
(Java) 프로그래머스 폰켓몬
·
코딩 테스트
문제를 보고 생각을 많이 했다. 계속 읽다 보니 중복을 제거하고 두 값 중 최솟값을 리턴하면 된다는 걸 깨닫고 쉽게 풀렸다. 문제가 어렵다기 보단 풀이 아이디어를 떠올리는 것이 어려웠다. 최종 코드 import java.util.HashSet; class Solution { public int solution(int[] nums) { int answer = 0; int max = nums.length / 2; // 중복을 제거하기 위해 해시셋에 넣기 HashSet set = new HashSet(); for(int i : nums) { set.add(i); } // 두 값중 최소값을 리턴 if(set.size() > max) { answer = max; } else { answer = set.size()..
(Java) 프로그래머스 실패율
·
코딩 테스트
문제를 읽고 어떻게 구현해야 할지 한참 고민했다. 각 스테이지의 번호와 실패율을 같이 저장하는 게 좋아 보여서 Map을 이용해야겠다는 생각을 했다. 실패율은 각 스테이지에 도전 중인 플레이어 수 / 클리어한 플레이어 수로 계산하게 된다. 각 스테이지에 도전중인 플레이어 수를 구하는 것은 문제가 없었는데 클리어한 플레이어 수를 구하는데 애를 먹었다. 한참 고민끝에 Collections.frequency를 이용해서 플레이어 숫자를 구하고 리스트에서 지우는 방법을 선택했다. 그렇게 실패율을 구해서 Map에 넣고 compareTo를 이용해서 값을 내림차순 정렬했다. 그런데 테스트 케이스 1, 6, 7, 9, 13, 23, 24, 25에서 실패로 나왔다........ 한참을 고민해도 모르겠어서 질문하기 탭을 보니..
(Java) 프로그래머스 약수의 개수와 덧셈
·
코딩 테스트
내 답에서 변수와 코드의 개수를 줄이는 연습을 해야겠다는 생각이 들었다. 풀 때는 쉽다는 생각이 들었는데 풀고 나서 급 반성하게 되었다. 최종 코드 import java.util.ArrayList; import java.util.List; class Solution { public int solution(int left, int right) { int answer = 0; List num = new ArrayList(); int temp = 0; // 수 구해서 리스트에 저장 while (left != right + 1) { num.add(left++); } for (int i = 0; i < num.size(); i++) { // 약수의 개수 측정 변수 int dnum = 0; for (int j = ..
(Java) 프로그래머스 3진법 뒤집기
·
코딩 테스트
n을 3진수로 바꾸는 방법은 n을 더 이상 나눌 수 없을 때까지 3으로 나눈 나머지를 저장하면 된다. 예를 들어 45를 3으로 나누면 몫은 15 나머지는 0 15를 3으로 나누면 몫은 5 나머지는 0 5를 3으로 나누면 몫은 1 나머지는 2 1을 3으로 나누면 몫은 0 나머지는 1 이렇게 45를 3진법으로 변환하면 문제에서 요구하는 뒤집기를 하지 않아도 자연스럽게 뒤집어서 구해진다. 그리고 0021을 10진법으로 변환하는 것은 가장 끝자리부터 3의 0승 3의 1승... 3의 K승까지 곱하여 더해주면 된다. 예를 들어 0021을 10진수로 변환하면 1 * 3의 0승 + 2 * 3의 1승 + 0 * 3의 2승 + 0 * 3의 3승 이 되어 7로 나오게 된다. 최종 코드 import java.util.Arra..
(Java) 문자열 p와 y의 개수
·
코딩 테스트
p와 y의 변수를 따로 설정해서 푸는게 마음에 안들었는데 다른 분 코드를 보니 count 변수 하나로 더하거나 빼서 답안을 만들었다. 유연하게 생각하면 저런 답이 나오는것 같다. 최종코드 class Solution { boolean solution(String s) { boolean answer = true; int pc = 0; int yc = 0; for(int i=0; i
(Java) 프로그래머스 2016
·
코딩 테스트
내장 함수를 이용해 간단하게 풀었다. 다른 분 코드를 보니 내장 함수 없이 구현했는데 날짜 관련해서는 자주 헷갈려서 저렇게 할 생각을 못했던 것 같다. 한번 정리해둬야지... 최종 코드 import java.text.ParseException; import java.time.LocalDate; class Solution { public String solution(int a, int b) throws ParseException{ String answer = ""; LocalDate date = LocalDate.of(2016, a, b); answer = date.getDayOfWeek().toString().substring(0,3); return answer; } } 다른 분 코드 public Str..
(Java) 프로그래머스 예산
·
코딩 테스트
요즘 자꾸 문제를 큐로 풀고 있다. 큐의 poll과 peek을 이용해서 신청금액을 적은 숫자부터 더하다가 다음 숫자를 더했을 때 금액이 예산 이상이면 그만두게 해야겠다 라고 생각해서 큐를 사용했는데 다른분들의 코드를 보니 너무 간단하게 풀어서 살짝 허무했다.... 하나의 문제도 최소 2가지 방법을 생각해서 풀어봐야겠다. 최종 코드 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; class Solution { public int solution(int[] d, int budget) { int answer = 0; // 큐에 넣기전에 정렬 Arrays.sort(d); Queue qu = new LinkedList();..
(Java) 프로그래머스 최소직사각형
·
코딩 테스트
어떻게 구현해야 하는지 생각하는데 시간을 좀 썼다. 금방 풀 것 같은 느낌이었는데 생각보다 명쾌하게 나오지는 않았다. 각 배열에서 큰 값은 큰 값 리스트에 넣고 작은 값은 작은 값 리스트에 넣어서 각 리스트에서 최댓값을 추출하는 것으로 구현했다. 리스트를 2개를 쓰고 싶지 않았는데 다른 방법이 바로 떠오르지 않아 그냥 했다... 최종 코드 import java.util.ArrayList; import java.util.Collections; import java.util.List; class Solution { public int solution(int[][] sizes) { int answer = 0; // 가로, 세로 길이 list 생성 List ltemp = new ArrayList(); List ..