기본 콘텐츠로 건너뛰기

6월, 2023의 게시물 표시

코딩 테스트 - 배열 두배 만들기

package programmers class 배열 _ 두배 _ 만들기 _230630 { /* 정수 배열 numbers 가 매개변수로 주어집니다 . numbers 의 각 원소에 두배한 원소를 가진 배열을 return 하도록 solution 함수를 완성해주세요 . */ fun solution (numbers: IntArray): IntArray { var answer: IntArray = intArrayOf () for (i in numbers){ answer += i* 2 } return answer } fun solution_short (numbers: IntArray) = numbers. map { it * 2 } /* solution 함수는 초기에 빈 배열 answer 를 생성합니다 . 그리고 numbers 배열의 각 원소를 반복하면서 해당 원소를 두 배한 값을 answer 배열에 추가합니다 . 반복이 끝나면 answer 배열을 반환합니다 . solution_short 함수는 더 간결한 구현으로 , numbers 배열의 각 원소를 두 배한 값을 계산하여 map 함수를 이용해 새로운 배열로 변환합니다 . 이를 바로 반환합니다 . */ }

코딩 테스트 - 모음 제거

package programmers class 모음 _ 제거 _230629 { // 영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다 . // 문자열 my_string 이 매개변수로 주어질 때 모음을 제거한 문자열을 return 하도록 solution 함수를 완성해주세요 . fun solution (my_string: String): String { var answer: String = "" for (i in my_string){ if (i != 'a' && i != 'e' && i != 'i' && i != 'o' && i != 'u' ){ answer += i } } return answer } // 위의 solution 함수를 최적화한 버전 fun solution2 (my_string: String): String { val vowels = setOf ( 'a' , 'e' , 'i' , 'o' , 'u' ) val answer = StringBuilder() for (char in my_string) { if (char !in vowels) { answer.append(char) } } return answer.toString() } // 정규표현식을 이용한 간단한 해결 방법 fun solution3 (myString: String) = myString. replace ( &qu

코딩 테스트 - 문자 반복 출력하기

package programmers class 문자 _ 반복 _ 출력하기 _230628 { // 문자열 my_string 과 정수 n 이 매개변수로 주어질 때 , // my_string 에 들어있는 각 문자를 n 만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요 . fun solution (my_string: String , n: Int): String { var answer: String = "" for (i in my_string){ for (j in 1 ..n){ answer += i } } return answer } fun solution_short (myString: String , n: Int) = myString. map { it .toString(). repeat (n) } . joinToString ( "" ) /* 첫 번째 함수인 solution 함수는 두 개의 매개변수 my_string 과 n 을 받고 , 결과로 반복된 문자열을 반환합니다 . answer 라는 빈 문자열을 초기화하고 , my_string 의 각 문자를 하나씩 반복하면서 내부의 두 번째 반복문에서 해당 문자를 n 번 반복하여 answer 에 추가합니다 . 이렇게 모든 문자를 반복하여 answer 에 저장한 후 , 최종적으로 answer 를 반환합니다 . 두 번째 함수인 solution_short 함수는 더 간단한 버전의 구현입니다 . solution 함수와 동일한 기능을 수행하지만 , 한 줄로 표현되어 있습니다 . myString 의 각 문자를 n 번 반복한 후 , 문자열로 변환

코딩 테스트 - 순서쌍의 개수

package programmers class 순서쌍의 _ 개수 _230627 { // 순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b) 로 표기합니다 . // 자연수 n 이 매개변수로 주어질 때 두 숫자의 곱이 n 인 자연수 순서쌍의 개수를 return 하도록 solution 함수를 완성해주세요 . fun solution (n: Int): Int { var answer: Int = 0 for (i in 1 ..n) { if (n % i == 0 ) { answer++ } } return answer } fun solution_short (n: Int) = ( 1 ..n). count { n % it == 0 } }

코딩 테스트 - 머쓱이보다 키 큰 사람

코틀린 좀 써보려고 코틀린으로 짜봄. kotlin을 고른 이유는 이게 java랑 많이 얽혀서 좀 제대로 볼까 함. package programmers class 머쓱이보다 _ 키 _ 큰 _ 사람 _230626 { fun solution (array:IntArray , height:Int):Int{ var answer: Int = 0 for (i in array){ if (i > height){ answer++ } } return answer } fun solution_stream (array: IntArray , height: Int) = array. filter { it > height } . size fun solution_stream2 (array: IntArray , height: Int): Int { // it 대신에 다른 변수명을 사용해도 되긴 하는데 , 그러면 // return array.filter { it > height }.size 대신에 // 아래와 같이 amugona( 아무거나 ) 를 넣으면 된다 . // it 은 예약어 같이 람다에서 쓰면 되는 거라서 간단하게 it 으로 쓴다고 한다 . return array. filter { amugona -> amugona > height } . size } }

코딩 테스트 - 접두사인지 확인하기

package programmers ; class 접두사인지 _ 확인하기 _230625 { /* 어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다 . 예를 들어 , "banana" 의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana" 입니다 . 문자열 my_string 과 is_prefix 가 주어질 때 , is_prefix 가 my_string 의 접두사라면 1 을 , 아니면 0 을 return 하는 solution 함수를 작성해 주세요 . */ public int solution (String my_string , String is_prefix) { int answer = 0 ; if (my_string.startsWith(is_prefix)) { answer = 1 ; } return answer ; } }

코딩 테스트 - 두 개 뽑아서 더하기

package programmers ; import java.util.* ; class 두 _ 개 _ 뽑아서 _ 더하기 _230624 { public int [] solution ( int [] numbers) { Set<Integer> set = new HashSet<>() ; int length = numbers. length ; for ( int i = 0 ; i < length - 1 ; i++) { for ( int j = i + 1 ; j < length ; j++) { set.add(numbers[i] + numbers[j]) ; } } int [] answer = new int [set.size()] ; int index = 0 ; for ( int num : set) { answer[index++] = num ; } Arrays. sort (answer) ; return answer ; } public int [] solution_stream_short ( int [] numbers) { Set<Integer> set = new HashSet<>() ; for ( int i = 0 ; i < numbers. length - 1 ; i++) { for ( int j = i + 1 ; j < numbers. length ; j++) { set.add(numbers[i] + numbers[j]) ; } } return set.stream().sorted().mapToInt(Integer::intValue).

코딩 테스트 - 짝수는 싫어요

package programmers ; import java.util.stream.IntStream ; class 짝수는 _ 싫어요 _230623 { // 정수 n 이 매개변수로 주어질 때 , n 이하의 홀수가 오름차순으로 담긴 배열을 return 하도록 solution 함수를 완성해주세요 . public int [] solution ( int n) { int counter = (n + 1 ) / 2 ; int [] answer = new int [counter] ; for ( int i = 0 ; i < counter ; i++) { answer[i] = 2 * i + 1 ; } return answer ; } public int [] solution_stream ( int n) { return IntStream. rangeClosed ( 1 , n) .filter(i -> i % 2 == 1 ) .toArray() ; // 위 코드에서 IntStream.rangeClosed(1, n) 는 1 부터 n 까지의 정수 범위를 생성합니다 . // 이후 filter(i -> i % 2 == 1) 를 통해 홀수만 필터링하고 , toArray() 를 사용하여 결과를 배열로 변환합니다 . } }

코딩 테스트 - 제일 작은 수 제거하기

package programmers ; import java.util.Arrays ; class 제일 _ 작은 _ 수 _ 제거하기 _230621 { public int [] solution ( int [] arr) { if (arr. length == 1 ) { return new int []{- 1 } ; } int min = Arrays. stream (arr).min().getAsInt() ; int [] answer = new int [arr. length - 1 ] ; int index = 0 ; for ( int i = 0 ; i < arr. length ; i++) { if (arr[i] != min) { answer[index++] = arr[i] ; } } /* Arrays.stream(arr).min().getAsInt() 을 사용하여 배열에서 최소값을 구합니다 . 불필요한 변수 min 초기화를 제거하고 , 최소값을 바로 사용합니다 . 불필요한 continue 문을 제거하고 , 최소값이 아닐 때만 answer 배열에 값을 추가합니다 . new int[]{-1} 을 바로 반환하여 배열을 생성하고 초기화합니다 . */ return answer ; } // stream 으로 하면 보기 좋음 public int [] solution_stream ( int [] arr) { if (arr. length == 1 ) { return new int []{- 1 } ; } int min = Arrays. stream (arr).min()

코딩 테스트 - 110 옮기기

package programmers ; import java.util.* ; public class _110_ 옮기기 _230620 { /* 주어진 코드는 주어진 문자열 배열에서 각 문자열에 대해 "110" 을 옮기는 작업을 수행하는 함수입니다 . 코드를 단계별로 설명하겠습니다 . 1. 주어진 문자열 배열의 길이에 맞게 결과를 담을 문자열 배열 `answer` 를 생성합니다 . 2. 주어진 문자열 배열을 순회하면서 각 문자열에 대해 작업을 수행합니다 . 3. 현재 처리 중인 문자열 `str` 에 대해 스택 `stack` 과 카운트 변수 `cnt` 를 초기화합니다 . 4. 문자열 `str` 을 순회하면서 각 문자를 처리합니다 . 5. 스택 `stack` 의 크기가 2 이상이라면 가장 최근에 넣은 2 개의 문자와 현재 문자를 비교합니다 . - 만약 "110" 인 경우 `cnt` 를 증가시킵니다 . - 그렇지 않은 경우에는 스택에 다시 문자를 넣습니다 . 6. 스택의 크기가 2 보다 작은 경우에는 현재 문자를 스택에 넣습니다 . 7. 스택의 크기 `idx` 와 "110" 을 삽입할 위치를 표시할 인덱스 `flag` 를 초기화하고 , 결과를 담을 `StringBuilder` 인 `sb` 를 생성합니다 . 8. 스택이 비어있지 않을 때까지 스택에서 문자를 꺼내면서 결과를 `sb` 에 역순으로 삽입합니다 . - 만약 `flag` 가 false 이고 꺼낸 문자가 '1' 인 경우에는 `idx` 를 1 감소시킵니다 . - `flag` 가 false 이고 꺼낸 문자가 '0' 인 경우에는 `flag` 를 true 로 변경합니다 . 9. `cnt` 가 0 보다 큰 경우 , 즉 "110" 을 삽입해야 할 경

코딩 테스트 - 조이스틱

class 조이스틱_230619 {     public int solution (String name ) {         int answer = 0 ;         int length = name. length (); //받아온 name의 길이         int index; // 다음 값들을 확인할 때 사용         int move = length - 1 ; // 좌우 움직임 수를 체크         for ( int i = 0 ; i < name. length (); i ++ ){             answer += Math. min (name. charAt (i) - 'A' , 'Z' - name. charAt (i) + 1 );             index = i + 1 ;             // 연속되는 A 갯수 확인             while (index < length && name. charAt (index) == 'A' ){                 index ++ ;             }             // 순서대로 가는 것과, 뒤로 돌아가는 것 중 이동수가 적은 것을 선택             move = Math. min (move, i * 2 + length - index);             move = Math. min (move, (length - index) * 2 + i);         }         return answer + move;     } } 위의 코드는 "name"이라는 문자열을 입력받아 조작해야 하는 최소한의 움직임 수를 계산하는 "solution"이라는 메서드를 포함한 Java 클래스입니다. 이 메서드는 정수형 값을 반환합니다. 코드를 자세히 살펴보면 다음과 같은 동작을 수행합니다: 1.

코딩 테스트 - 3 x n 타일링

package programmers ; import java.util.stream.IntStream ; public class _3_x_n_ 타일링 _230618 { /* 동적 계획법 (Dynamic Programming) 을 사용하여 문제를 해결합니다 . 해당 문제는 3 x n 크기의 바닥을 2 x 1 크기의 타일로 채우는 방법의 수를 구하는 문제입니다 . 직사각형 타일은 가로로 배치하거나 세로로 배치할 수 있습니다 . 해당 코드에서는 동적 계획법을 활용하여 문제를 해결합니다 . 우선 , 가로의 길이가 1 인 경우는 2 가지 방법이 가능하므로 dp[1] 은 2 로 초기화합니다 . 가로의 길이가 2 인 경우는 3 가지 방법이 가능하므로 dp[2] 는 3 으로 초기화합니다 . 이후 , dp[i] 는 dp[i-1] 과 dp[i-2] 의 값을 활용하여 계산됩니다 . i 가 짝수인 경우 (i%2 == 0) 에는 이전의 경우의 수 (dp[i-1] 과 dp[i-2]) 를 더해서 계산합니다 . i 가 홀수인 경우에는 dp[i-1] 의 경우의 수에 2 를 곱하고 dp[i-2] 의 경우의 수를 더해서 계산합니다 . 마지막으로 , dp[i] 를 1000000007 로 나눈 나머지를 구하여 저장합니다 . 이는 문제에서 요구하는 방법의 수를 구하는 과정에서 숫자가 매우 커지는 것을 방지하기 위함입니다 . 마지막으로 , dp[n] 을 반환하여 주어진 n 에 대한 방법의 수를 출력합니다 . 예를 들어 , n 이 8 인 경우를 예로 들면 , dp[1] 과 dp[2] 는 이미 초기화되어 있고 , dp[3] 부터 dp[8] 까지의 값을 계산하여 결과를 반환합니다 . 최종적으로 dp[8] 의 값인 22 를 반환합니다 . */ public int solution ( int n) { int answer = 0 ;

코딩 테스트 - 특정 문자 제거하기

import java.util.stream.Collectors; class 특정_문자_제거하기_230617 {     public String solution (String my_string , String letter ) {         String answer = my_string. replace (letter, "" );         return answer;     }         public String solution_stream (String my_string , String letter ) {         String answer = my_string. chars ()                 . filter (c -> c != letter. charAt ( 0 ))                 . mapToObj (c -> String. valueOf (( char ) c))                 . collect (Collectors. joining ());                 return answer;     } }

코딩 테스트 - 저주의 숫자 3

public class Solution {     public int solution ( int n ) {         int answer = 0 ;         for ( int i = 0 ; i < n; i ++ ) {             answer ++ ;             while (answer % 3 == 0 || containsThree (answer)) {                 answer ++ ;             }         }         return answer;     }     private boolean containsThree ( int number ) {         String numberStr = String. valueOf (number);         return numberStr. contains ( "3" );     } }

코딩 테스트 - 아이스 아메리카노

class Solution {     public int [] solution ( int money ) {         int [] answer = new int [ 2 ];         int coffee = 5500 ;         answer[ 0 ] = money / coffee;         answer[ 1 ] = money - answer[ 0 ] * coffee;                         return answer;     }         public int [] solution_oneline ( int money ) {         return new int [] { money / 5500 , money % 5500 };     } }

코딩 테스트 - 배열의 유사도

import java.util.Arrays; public class 배열의_유사도_230612 {     public int solution ( String [] s1 , String [] s2 ) {         return ( int ) Arrays. stream (s1)                 . distinct ()                 . filter (Arrays. asList (s2) :: contains)                 . count ();     }         public int same_solution ( String [] s1 , String [] s2 ) {         int answer = 0 ;                 for ( int i = 0 ; i < s1.length; i ++ ){             for ( int j = 0 ; j < s2.length; j ++ ){                 if (s1[i]. equals (s2[j])){                     answer ++ ;                     break ;                 }             }         }                 return answer;     } }

코딩 테스트 - 마지막 두 원소

package programmers ; import java.util.* ; class 마지막 _ 두 _ 원소 _230611 { public int [] solution ( int [] num_list) { int len = num_list. length ; int [] answer = Arrays. copyOf (num_list , len+ 1 ) ; int last1 = num_list[len- 1 ] ; int last2 = num_list[len- 2 ] ; if (last1 > last2){ answer[answer. length - 1 ] = last1 - last2 ; } else { answer[answer. length - 1 ] = last1 * 2 ; } return answer ; } }

코딩 테스트 - 옷가게 할인 받기

package programmers ; class 옷 _ 가게 _ 할인받기 _230610 { public int solution ( int price) { int answer = 0 ; if ( price >= 500000 ) { answer = ( int )(price* 0.8 ) ; } else if ( price >= 300000 ){ answer = ( int )(price * 0.9 ) ; } else if (price >= 100000 ){ answer = ( int )(price * 0.95 ) ; } else { answer = price ; } return answer ; } }

코딩 테스트 - 점의 위치 구하기

package programmers ; class 점의 _ 위치 _ 구하기 _230610 { public int solution ( int [] dot) { int answer = 0 ; int xpointer = dot[ 0 ] ; int ypointer = dot[ 1 ] ; if (xpointer > 0 ){ if (ypointer > 0 ){ answer = 1 ; } else { answer = 4 ; } } else { if (ypointer > 0 ){ answer = 2 ; } else { answer = 3 ; } } return answer ; } public int solution2 ( int [] dot) { int xpointer = dot[ 0 ] ; int ypointer = dot[ 1 ] ; if (xpointer > 0 && ypointer > 0 ) { return 1 ; } else if (xpointer < 0 && ypointer > 0 ) { return 2 ; } else if (xpointer < 0 && ypointer < 0 ) { return 3 ; } else if (xpointer > 0 && ypointer < 0 ) { return 4 ;

코딩 테스트 - n 번째 원소까지

package programmers ; import java.util.Arrays ; public class n_ 번째 _ 원소까지 _230609 { public int [] solution ( int [] num_list , int n) { // 정수 리스트 num_list 와 정수 n 이 주어질 때 , // num_list 의 첫 번째 원소부터 n 번째 원소까지의 // 모든 원소를 담은 리스트를 return 하도록 solution 함수를 완성해주세요 . int [] answer = new int [n] ; for ( int i = 0 ; i < answer. length ; i++){ answer[i] = num_list[i] ; } return answer ; } public int [] solution_short ( int [] num_list , int n) { return Arrays. copyOfRange (num_list , 0 , n) ; } }