반응형

알고리즘/프로그래머스 Level1 49

[프로그래머스,자바] Level1: 두 개 뽑아서 더하기

문제분석 문제는 간단하다 numbers의 2개의 갯수를 더한뒤 중복없이 가능한 숫자들을 오름차순으로 나열하는것이다. 중복없이, 그리고 오름차순으로 나열하는게 핵심이다. 중복없이 자료를 걸러주는 배열이 있다. 그건 바로 HashSet이다. Set에는 3종류가있다. HashSet, TreeSet, LinkedHashSet이 있다. HashSet: 중복없이 자료를 걸러주는 배열. 하지만 순서가 보장되지않음.(정렬이안됨) TreeSet: 중복없이 자료를 걸러주는데 기본적으로 오름차순 정렬까지해준다. LinkedHashSet: 중복없이 자료를 걸러주는데, 자료가 입력받은순서대로 저장된다. 여기서 우린 TreeSet을 사용할것이다. Set은 자료를 뽑아올때 list나 Array처럼 index로 뽑아오지못한다. 그래..

[프로그래머스,자바] Level1 : 실패율

문제분석 stages에 담겨져있는 숫자들은 각각의 유저가 클리어하지 못한 스테이지의 번호를 나타낸 배열이다. 여기서 실패율을 구하는데 실패율은 (클리어하지못한 스테이지 번호의 수/스테이지에 도달한 유저)이다. 각 스테이지마다 실패율을 구했다면, 실패율을 제한사항 규칙에 따라 정렬한다. 재정렬을 했다면, 실패율이 높은스테이지부터 내림차순으로 반환한다. 언뜻보면 정말 간단해보이지만, 코딩을 시작하는순간 막히는지점이 꽤있다. 그것 역시 다뤄보겠다. 우선 실패율을 구하는것까진 큰 어려움이없다. 그런데 모든 스테이지의 실패율을 구해놨고 재정렬하려다가, 문득 이 실패율이 어느 스테이지의 실패율인지 모르게된다. 이걸 해결하기위해서, [ 스테이지의 번호, 실패율] 을 저장하는 배열을 준비한다. 배열을 정렬하려고하는데,..

[프로그래머스,자바] Level1: 예산

문제분석: 문제를 요약하자면, 정해진 budget 속에서 최대한 많은 부서를 지원해주는게 목표다. 문제풀이: 최대한 많은 부서를 지원해주려면, 신청금액이 적은순부터 지원해줘야한다. 따라서 d를 오름차순으로 정렬한다. 배열 d를 순회하면서 budget이 0이하가되는순간 순회를 종료하고 answer을 반환한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import java.util.*; class Solution { public int solution(int[] d, int budget) { int answer = 0; Arrays.sort(d); for(int i=0;i

[프로그래머스,자바]Level 1 :약수의 개수와 덧셈

문제분석: left~right 숫자사이에 있는 숫자들의 약수의 갯수가 짝수면 + , 홀수면 - 를 해준다. 문제풀이: left~right를 순회하면서 메소드 alg()를 부른다. alg(int x)는 x의 약수의갯수를 구하고 홀수나 짝수라면 + 할지 -할지를 결정한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import java.util.*; class Solution { public int solution(int left, int right) { int answer = 0; for(int i=left;i

[프로그래머스,자바] Level1: 키패드 누르기

문제분석 문제를 요약하자면, 1 4 7 키패드는 왼손이, 3 6 9 키패드는 오른손이, 중앙 키패드는 맨허튼거리를 이용해 짧은쪽이 클릭하고, 맨허튼 거리마저 같다면 hand의 따라서 클릭한다. 문제풀이 왼손 = 10 오른손=12 로 지정. num이 1 4 7 이면 L을 삽입, num이 3 6 9라면 R을 삽입 num이 2 5 8 0 이라면 L과 R의 맨허튼거리를(getDist) 구하고, 거리에 따라 입력 거리마저도 같다면, hand의 따라서 입력한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51..

[프로그래머스,자바] Level1 : 3진법 뒤집기

문제분석: 일정한 숫자 n을 3진법을한뒤 앞뒤 바꾸고, 다시 10진법으로 바꾸는문제다. 문제풀이: 기본적으로 n진법을 만드는 테크닉을 알고있으면 편하다. while문을 사용해 n진법을 만들고, 나오는 숫자들을 앞에서부터 채운다 이 과정에서 앞뒤반전은 생략할수가있다. 3진법 ->10진법으로 변환하기위해 3^i 만큼 더해준다. 그리고 answer리턴 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Solution { public int solution(int n) { int answer = 0; String temp=""; while(n!=0){ temp=n%3+temp; n/=3; } String[] st =temp.split(""); for(int i=0;i

[프로그래머스,Java] Level1: 위클리챌린지 2주차

문제분석: 요점은, N명의 학생들이 서로 개인평가를한뒤 평가받은점수를 평균을구해 등급을 부여해주는문제다. 여기까지가 딱 Level1 수준인데 한술 더떠서 Level2급으로 바뀐다 하지만 특수한규칙이있는데, 자기자신이 평가한점수가 유일하고, 최저최대면 평가에 제외합니다. 이 규칙을 따라서 학생들의 등급을 문자열로 반환하는 문제다. 문제풀이: 처음 이 문제를 풀엇을땐, 특수한규칙에 맞춰서 반복문을 최대로 줄이는(최적화)법을 오래 고민해봤다. 하지만 명쾌하게 생각나지않아, 일단 생각나는대로 풀기로 해보았다. 우선 메소드 3개를 구성했다. 1.등급을 구하는 GetGrade 2.유일한지 구하는 IsUnique 3.최저최대인지 구하는 IsMaxMin 1.GetGrade: if else로 등급을 나눠서 구현했다. 2..

[프로그래머스,Java] Level1: 숫자 문자열과 영단어

문제분석: 카카오문제다. 카카오 1단계=프로그래머스 2단계라고 생각하면된다. 문자열 s에 숫자와 영어가 섞여있다. 이 문자열 s를 모두 숫자로 바꿔달라는 문제다. 문제풀이: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 import java.util.*; class Solution { public int solution(String s) { int answer = 0; String temp =""; String word =""; HashMap dic = new HashMap(); dic.put("zero",0); dic.put("one",1); dic.put(..

반응형