Tech/Algorithm
-
배열을 오른쪽으로 N번 회전하기Tech/Algorithm 2023. 10. 15. 15:30
fun rotateArrayRight(arr: IntArray, n: Int): IntArray { val len = arr.size val rotatedArr = IntArray(len) for (i in arr.indices) { rotatedArr[(i + n) % len] = arr[i] } return rotatedArr } fun main() { val s = intArrayOf(1, 2, 3, 4, 5) val n = 2 val rotatedS = rotateArrayRight(s, n) println(rotatedS.joinToString(", ")) } 코드 설명: 먼저, rotateArrayRight라는 함수를 정의하여 구현을 시작합니다. 이 함수는 정수 배열 arr와 정수 n을 매개변..
-
큐 2개로 스택 구현하기 with KotlinTech/Algorithm 2023. 10. 15. 15:21
'2개의 큐로 스택을 어떻게 구현할 수 있을까?'에 대한 내용입니다. 큐(Queue)와 스택(Stack)은 프로그래밍에서 자주 사용되는 자료 구조로, 각각 First-In-First-Out(FIFO)과 Last-In-First-Out(LIFO)의 특성을 가지고 있습니다. 이 두 자료 구조의 동작 방식이 다르기 때문에, 하나를 이용해 다른 하나를 구현하는 것은 꽤 재미있는 문제로 다가옵니다. 기본 원리 스택을 구현하기 위해 큐 2개를 사용하는 기본 원리는 다음과 같습니다: 원소를 스택에 '푸시'하기 위해서는, 큐 A를 이용합니다. 원소를 스택에서 '팝'하거나 '피크'하기 위해서는, 큐 B를 이용하여 큐 A의 원소를 하나 빼고, 나머지 원소들을 큐 B로 이동시킨 뒤, A와 B의 역할을 바꾸어 팝/피크 연산을..
-
두 개의 스택을 사용하여 큐 구현하기Tech/Algorithm 2023. 10. 15. 15:16
스택과 큐의 기본 개념 스택 (Stack) 스택은 데이터를 후입선출(LIFO: Last-In-First-Out) 방식으로 저장하는 자료 구조입니다. 즉, 가장 나중에 들어간 데이터가 가장 먼저 나오게 됩니다. 큐 (Queue) 반면에 큐는 선입선출(FIFO: First-In-First-Out) 방식으로 데이터를 저장합니다. 처음 들어간 데이터가 가장 먼저 나오게 되죠. 스택 두 개로 큐를 만들기 스택 두 개를 사용하여 큐의 동작을 구현할 수 있습니다. 기본 알고리즘은 다음과 같습니다: Enqueue (데이터 추가): 첫 번째 스택을 사용하여 데이터를 추가합니다. Dequeue (데이터 제거): 만약 두 번째 스택이 비어 있다면, 첫 번째 스택의 모든 요소를 두 번째 스택으로 옮긴 후, 두 번째 스택에서 ..
-
중괄호 짝 맞추기 문제 풀이Tech/Algorithm 2023. 10. 15. 15:12
주어진 문자열에서 중괄호 {와 }가 올바르게 짝을 이루고 있는지 판별하는 함수를 작성하세요. 올바른 짝을 이루고 있다면 true, 그렇지 않다면 false를 반환해야 합니다. 해결 전략 이 문제를 해결하기 위해선 스택이라는 자료구조를 활용합니다. 스택은 LIFO(Last In, First Out)의 특징을 가진 자료구조로, 마지막에 들어간 요소가 가장 먼저 나오게 됩니다. fun isValidBrackets(s: String): Boolean { val stack = mutableListOf() for (ch in s) { when (ch) { '{' -> stack.add(ch) '}' -> { if (stack.isNotEmpty() && stack.last() == '{') { stack.remov..
-
List and StackTech/Algorithm 2018. 10. 20. 15:12
/** * 배열의 데이터를 순서대로 꺼내 조건에 맞게 각 바구니 (스택) 에 분류 한다. * 조건: 바구니의 합은 20 을 넘을수 없다. */ public List doDo() { final List elements = Arrays.asList(9, 7, 6, 6, 4, 3, 4, 5, 3, 4, 3, 4, 1, 2); List result = new ArrayList(); Stack stack = new Stack(); for (Integer el:elements) { int sum = stack.stream().reduce(0,Integer::sum)+el; if(sum
-
Java - integer converto to bit and bit countTech/Algorithm 2018. 10. 20. 15:09
/** * int 형 숫자를 비트로 변환할 경우 비트 개수 구하기 * 제약 사항: Integer.toBinaryString 또는 Integer.toString 함수 사용 불가 */ public int getlen(int number) { int bitCount = 0; int bit = 1; while(bit < number) { bit = bit*2; bitCount++; } return bitCount; } /** * int 형 숫자를 비트로 변환 하기 * 제약 사항: Integer.toBinaryString 또는 Interger.toString 함수 사용 불가 */ public boolean[] convertToBinary(int number) { int bitCount = 0; int bit = ..
-
checkPrimeNumberTech/Algorithm 2018. 10. 9. 23:39
/*Implement findPrimeNumber(k) that returns the k-th prime number. For example, findPrimeNumber(4) should return 7. */@Testpublic int findPrimeNumber(int k){ int i = 2; int step = 0; while(true){ if(isPrimeNumber(i)){ step ++; if(step == k){ return i; } } i++; }}public boolean isPrimeNumber(int k) { for(int i=2;i
-
Java - 순열 ( Permutation )Tech/Algorithm 2017. 5. 28. 14:35
public static void main(String[] args) { System.out.println(getPermutations("324")); } /** * * 순열 구하기 */ public static List getPermutations(String s){ if(s==null) return null; //boolean 은 누구를 선택 했는지 판별 파라미터 return permuRec(s,new boolean[s.length()],"",new ArrayList()); } private static List permuRec(String s, boolean[] pick,String perm,ArrayList result){ //종료 조건 if(perm.length() == s.length()){ ..