반응형

분류 전체보기 316

[프로그래머스,자바] Level1: 두 정수 사이의 합

문제분석 a 와 b사이에 있는 숫자들을 모두 더하면된다. a와 b의 대소관계는 정해져있지 않아있다. 문제풀이 시작값을 Math.min 으로 설정하고 조건을 Math.max로 설정하고 반복하여 더하면 쉬운문제다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import java.util.*; class Solution { public long solution(int a, int b) { long answer = 0; if(a==b){ answer=a; } else{ for(int i=Math.min(a,b);i

[프로그래머스,자바] Level1: 나누어 떨어지는 숫자 배열

문제분석 Divisor에 들어있는 숫자로 Arr의 배열들의 숫자중에 나눠지는 숫자를 리턴해주면 되는문제다. 아무것도 나눠지지않으면 새롭게 [-1] 리턴을 배열하면된다. 문제풀이 Divisor에 의해 나눠지는 숫자가 몇개인지 정확히모르니, List를 선언하고 나눠지는 숫자들을 넣었다. list의 사이즈가 0이면 [-1] 를 리턴해줬다. 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[] arr, int divisor) { List list = new ArrayList(); Arrays.sort(arr); for(int i=0;i

[프로그래머스,자바] Level1: 같은 숫자는 싫어

문제분석 배열 arr의 숫자들이 연속적으로 나타내는 숫자면 제거하고 남은수들을 리턴하는 문제이다. 언뜻보면 중복을 제거 하는것같아서 중복제거 배열인 Set을쓰면 큰일난다. 중복이아니라 연속된숫자다. 예제 1번만 보면 알수있다. 연속된 숫자, 즉 arr의 숫자들을 하나씩넣을때, 넣을숫자와 배열의 맨마지막 숫자가 같으면 안넣으면된다. 문제풀이 Stack을 사용해서 풀수있다. 하지만, 필자는 list의 마지막 원소를 반환해주는 list.getLast()를 사용했다. list.getLast 원소와 arr[i]가 같지않으면 넣고, 같으면 넣게 구현했다. 그리고 list를 int[]형으로 변환하면 끝이다. 필자는, 변환하는법을 구글링해서 넣었지만, list를 반복순회해 int[]에 넣어도 비슷한 속도를낸다. 그냥 ..

[프로그래머스,자바] Level1: 다트게임

문제 분석 문제를 요약하자면 , 스코어+보너스+옵션의 조합으로 3번의 기회를 점수 토탈로 반환하면 되는문제다. 이 옵션이 있을수도있고 없을수도 없기에, 생각을많이해야한다. 옵션이 무조건있다면 3자리씩 끊어 생각할수 있엇겟지만, 불가능하다. 그렇다면 스코어를 따로 빼놓고 보너스와 옵션을 계산하는식으로 풀어야한다. 문제 풀이 스코어를 빼놓기위해, replaceAll로 옵션기호를 모두 빈칸으로만든다. 그 후 보너스를기준으로 분해후 score로저장한다. dartResult를 1글자씩 순회하여 확인하기위해 split("")으로 분해후 dart_sp로 저장한다. 3번의 결과를 저장하기위해 크기가 3인 total배열을 선언한다. dart_sp를 순회하면서, 보너스와 옵션을 추가하여 합계를 구한다. 1 2 3 4 5 ..

[프로그래머스,자바] Level1: 비밀지도

문제분석 카카오문제다 레벨1치곤 많이 까다롭다. 입력값으로 2개의 숫자배열을 주고, 숫자를 2진법으로 변환시킨뒤 변환한 2개의 숫자배열들중 1이 하나라도있다면 #으로 출력하고 둘다 0이라면 빈칸으로 출력한다. 문제풀이 우선 숫자들을 이진법으로 바꿔야하니, binary 메소드를 만들었다. 이 binary메소드는 숫자를 2진법으로 바꾸되, 주어진 (비밀지도)맵의 가로크기 N보다 작으면 나머지는 0으로 추가하는 메소드로 작성한다. binary메소드를 작성하였으니 메인으로 넘어가자. 비밀지도의 행을 순회하면서, 0과 1로 변환한 배열을 순회한다. (이중반복) 1이 하나라도있으면, #을 넣고 아니라면 빈칸을넣는다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2..

[프로그래머스,SQL] Level1: 여러 기준으로 정렬하기

문제분석 동물의 아이디와 이름 보호 시작일을 조회한다. 여기서 조건이 이름순으로 조회를 하되, 이름이 같으면 나중에 시작한 동물(보호 시작일이 나중부터)순으로 정렬한다. 정렬조건이 2개를 같이넣어줘야한다. 문제풀이 1.아이디, 이름, 보호시작일 검색 2. 테이블 선택 3. 이름, 보호시작일 역순으로 조회 1 2 3 4 -- 코드를 입력하세요 SELECT ANIMAL_ID,NAME,DATETIME from ANIMAL_INS order by NAME ,DATETIME desc cs

알고리즘/MYSQL 2021.08.15

[프로그래머스,자바] Level1: 가운데 글자 가져오기

문제분석 문자열 s가운데 글자를 반환하면되는 문제다. 단어의 길이가 짝수면 가운데 두글자를 반환하면댄다. 문제풀이 문제 그대로 풀면 어렵지않는 문제였다. s의 길이를 잰뒤 홀수와 짝수인 경우를 구분해서 구현하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import java.util.*; class Solution { public String solution(String s) { String answer = ""; if(s.length()%2==1){ answer=s.substring(s.length()/2,s.length()/2+1); } else{ answer=s.substring(s.length()/2-1,s.length()/2+1); } return answer; } } C..

[프로그래머스,자바] Level1: 어린동물 찾기

문제분석 여기서 말하는 젊은 동물은 Intake condition이 Aged가 아닌 동물들이다. 결과는 아이디순으로 조회하자 문제풀이 1.ID,NAME을 선택 2. animal ins 테이블 선택 3. 조건 intake condition이 aged가 아닌것을 설정 4. ID순으로 정렬 1 2 3 4 5 -- 코드를 입력하세요 SELECT ANIMAL_ID,NAME from ANIMAL_INS Where INTAKE_CONDITION!='Aged' order by ANIMAL_ID cs

[프로그래머스,자바] Level1: 2016년

문제분석 간단하게 2016년달력의 a 월 b일의 요일을 영어로 앞 3글자씩만 따와서 리턴하면댄다. 자바 API를 안쓰고하면 엄청난 노가다를 해야한다. 달력 API는 알고리즘에서 잘 쓰이는경우가 별로없으니 반드시 알필요는없고 스마트하게 구글링해서 API를 찾아쓰자 문제풀이 LocalDate.of(2016,a,b) 를 사용해, 날짜를입력한다. getDayOfWeek()로 날짜의 요일을 반환한다. 이때 DATE타입으로 반환대니, 문자열로 만들어주는 toString()을 붙여준다. 문자열로 MONDAY처럼 나오니, 앞 3글자만 따게 substriong(0,3)으로 잘라준다. 1 2 3 4 5 6 import java.time.*; class Solution { public String solution(int a..

반응형