알고리즘/JAVA 27

[JAVA] 전화번호 목록 - 프로그래머스

풀이 : 이문제를 읽자마자 찾아본건 접두어이다... " 접두사는 어떤 단어의 앞에 붙어 뜻을 첨가하여 하나의 다른 단어를 이루는 말 " 이라고 해서 Contains 는 제외 1. hash 문제이니 만큼 hashmap 을 사용한다 인자는 String, List 2. HashMap 을 채울때 Key 값을 넣고 List 는 Key 값을 제외한 값으로 List 로 변환하여 넣는다. 3. Key 별로 List 를 Foreach로 돌려 접두어 인지 체크하여 하나라도 false 시 Break 진행 접두어 확인 방법 : IndexOf, StartWith 등등... 하지만 효율성이 0점... package com.company; import java.util.ArrayList; import java.util.Arrays..

알고리즘/JAVA 2020.11.16

[JAVA] 완주하지 못한 선수 - 프로그래머스

풀이 : 해시 파트에 있는 문제 인데 효율성이 0점 나왔다..ㅎ 1. 참여 인원에 대한 배열을 중복값을 없앤 리스트 생성 2. 리스트 인원에 대한 hashmap 에 Key 와 Value 를체크하여 값을 넣기 3. 만들어진 hashmap로 완주자를 비교하여 1이상이 된 값을 answer 에 넣고 Break 효율성이 엉망인 이유는 구글링을 하고 비교했을 때 이유를 알게되었다. -> 다중 For 문이 2개 + 중복을 없애는 Stream 구문 에의한 시간복잡도가 엄청나게 올라간것이었다.. package com.company; import java.util.*; import java.util.logging.Logger; import java.util.stream.Collectors; public class NoF..

알고리즘/JAVA 2020.11.13

[JAVA] 프린터 - 프로그래머스

문제 : 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 제한사항 : 현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다. 인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다. location은 0 이상 (현재 대기목록에 있..

알고리즘/JAVA 2020.10.24

[JAVA] 스킬트리 - 프로그래머

문제 : 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요. 제한조건 : ..

알고리즘/JAVA 2020.10.23

[JAVA] 124 나라의 숫자 - 프로그래머스

문제 : 24 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 124 나라에는 자연수만 존재합니다. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다. 풀이 : 3진법과 비슷해서 공책에 계속 3으로 나누기만 하다가 코딩으로 옮겼더니 디버깅 하다가 맞춰진 경우가 됬다.. 일단 10진법 수 를 3으로 나눈 나머지가 124 나라의 일의 자리가 된다 ( 나머지가 0 일 시 4로 변경) 그후 일전에 3으로 나눈 몫을 3으로 나눈 나머지를 구해 나아간다. ex) 8 = 몫 : 2, 나머지 : 2 -> 2 몫 : 0, 나머지 : 2 ->22 3으로나눈 나머지가 0인 배수들은 나누고 몫에 -1 을 진행 ex) 9 = 몫 : 3, 나머지 : 0 (4)-..

알고리즘/JAVA 2020.10.22

[JAVA] 소수찾기 - 프로그래머스

문제 : 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 풀이 : 에라토스테네스의 체! C# 에서는 Bool 배열을 만들어서 진행 하였고 Java 에서는 주어진 n 까지의 배열을 만드는 것부터 시작해서 풀게 되었다! package com.company; import java.util.Arrays; import java.util.stream.IntStream; import java.util.stream.Stream; public class Find_PrimeNumber { public static void main(String[] args) { System.out.pri..

알고리즘/JAVA 2020.10.21

[JAVA] 3진법 뒤집기 - 프로그래머스

문제 : 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하시오! 제한사항 : n은 1 이상 100,000,000 이하인 자연수입니다. 풀이 : package com.company; import java.util.Arrays; import java.util.Stack; public class TernaryFlip { public static void main(String[] args) { System.out.println(solution(45)); System.out.println(solution(125)); } public static int solution(int n) { int answer = 0; int division; ..

알고리즘/JAVA 2020.10.21

[JAVA] 콜라츠 추측 - 프로그래머스

문제 : 1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다 1-1 . 입력된 수가 짝수라면 2로 나눕니다. 1-2 . 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다 이때 1이 되기까지 작업이 몇번 이뤄졌는지 리턴! 단 500 번 반복해도 1이 안되면 -1 반환! 제한 사항 : 입력된 수, num은 1 이상 8000000 미만인 정수입니다. 풀이 : Step 진행 되는것처럼~ Enum 변수 사용법이 다르다! package com.company; import java.util.Arrays; public class Co..

알고리즘/JAVA 2020.10.21

[JAVA] 제일 작은수 제거하기 - 프로그래머스

문제 : 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 제한조건 arr은 길이 1 이상인 배열입니다. 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다. 풀이 : 빠르게! package com.company; import java.util.Arrays; public class MostLowerNumDelete { static int[] arr = {1,5,7,3,2,6}; public static void main(String[] args) { ..

알고리즘/JAVA 2020.10.21

[JAVA] 최대공약수, 최대공배수 - 프로그래머스

문제 : 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환 풀이 : 유클리드 호제법! package com.company; public class GetGCD_LCM { public static void main(String[] args) { for (int item: solution(3,12)) { System.out.println(item); } } public static int[] solution(int n, int m) { int[] answer = {..

알고리즘/JAVA 2020.10.21