반응형

문제 설명

 

문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.


제한사항

 

1 ≤ indices의 길이 < my_string의 길이 ≤ 100

my_string은 영소문자로만 이루어져 있습니다

0 ≤ indices의 원소 < my_string의 길이

indices의 원소는 모두 서로 다릅니다.


입출력 예

 

my_string indices result
"apporoograpemmemprs" [1, 16, 6, 15, 0, 10, 11, 3] "programmers"

입출력 예 설명

 

입출력 예 #1

예제 1번의 my_string의 인덱스가 잘 보이도록 표를 만들면 다음과 같습니다.

index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
my_string a p p o r o o g r a p e m m e m p r s

indices에 있는 인덱스의 글자들을 지우고 이어붙이면 "programmers"가 되므로 이를 return 합니다.

 


풀이

 

-> indices를 내림차순으로 정렬 한 후에 substring을 통해 my_string에서 잘라할 문자의 앞부분과 뒷부분을 더한다. 반복문을 통해 이 작업을 반복하여 잘라낼 문자를 잘라낸다. 주의할 점은 indices가 0일 때는 substring이 1부터 시작할 수 있도록 해준다.

 


import java.util.*;
class Solution {
    public String solution(String my_string, int[] indices) {
        String answer = "";
        
        Arrays.sort(indices);
        for(int i=0; i<indices.length/2; i++){
            int temp = indices[i];
            indices[i] = indices[indices.length - 1 - i];
            indices[indices.length - 1 - i] = temp;
        }
        
        for(int i=0; i<indices.length; i++){
            if(indices[i]!=0){
                my_string = my_string.substring(0,indices[i])+my_string.substring(indices[i]+1);
            } else {
                my_string = my_string.substring(indices[i]+1);
            }
        }
        answer = my_string;
        return answer;
    }
}
반응형
반응형

문제 설명

정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.


제한사항

 

1 ≤ n ≤ 1,000,000

1 ≤ k ≤ min(1,000, n)


입출력 예

n k result
10 3 [3,6,9]
15 5 [5,10,15]

입출력 예 설명

입출력 예 #1

1 이상 10 이하의 3의 배수는 3, 6, 9 이므로 [3, 6, 9]를 return 합니다.

 

입출력 예 #2

1 이상 15 이하의 5의 배수는 5, 10, 15 이므로 [5, 10, 15]를 return 합니다.


풀이

-> n을 k로 나눈 몫 크기의 answer 배열을 선언하고, 반복문을 통해 i를 1부터 n까지 돌리며 k로 나눈 나머지가 0인 k의 배수를 찾아 answer 배열에 담아준다. 이 때, count라는 변수를 0으로 놓고 조건문이 돌면 answer의 index값으로 사용하고 1씩 증가시켜준다.


코드

class Solution {
    public int[] solution(int n, int k) {
        int[] answer = new int[n/k];
        int count = 0;
        for(int i=1;i<=n;i++){
            if(i%k==0){
                answer[count]=i;
                count++;
            }
        }
        return answer;
    }
}
반응형
반응형

문제 설명

 

알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, my_string에서 'B'의 개수,..., my_string에서 'Z'의 개수, my_string에서 'a'의 개수, my_string에서 'b'의 개수,..., my_string에서 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

 

1 ≤ my_string의 길이 ≤ 1,000


입출력 예

 

my_string result
"Programmers" [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]

입출력 예 설명

 

입출력 예 #1

예제 1번의 my_string에서 'P'가 1개, 'a'가 1개, 'e'가 1개, 'g'가 1개, 'm'이 2개, 'o'가 1개, 'r'가 3개, 's'가 1개 있으므로 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0]를 return 합니다.


풀이

 

-> 알파벳 a-z, A-Z의 갯수가 52개이다. 해당 개수만큼 answer을 초기화시켜준다. 그 후에 대소문자를 구분해서 해당 배열의 index를 잡아서 1씩 증가시켜준다. 여기서 a-z와 A-Z 사이에 다른 문자도 있다는 것을 몰라서 한번에 처리하려다 헤맸다. 기억해두도록 하자.

 

알파벳은 65부터 90까지의 숫자로, 소문자 알파벳은 97부터 122까지의 숫자로 표현


코드

 

class Solution {
    public int[] solution(String my_string) {
        int length = my_string.length();
        int[] answer = new int[52];
        
        for (int i = 0; i < length; i++) {
            char c = my_string.charAt(i);
            if (c >= 'A' && c <= 'Z') {
                // 대문자 알파벳인 경우
                answer[c - 'A']++;
            } else if (c >= 'a' && c <= 'z') {
                // 소문자 알파벳인 경우
                answer[c - 'a' + 26]++;
            }
        }
        
        return answer;
    }
}
반응형
반응형

문제 설명

 

자열 my_string과 정수 s, e가 매개변수로 주어질 때, my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.


제한사항

 

my_string은 숫자와 알파벳으로만 이루어져 있습니다.

1 ≤ my_string의 길이 ≤ 1,000

0 ≤ s  e < my_string의 길이


입출력 예

my_string s e result
"Progra21Sremm3" 6 12 "ProgrammerS123"
"Stanley1yelnatS" 4 10 "Stanley1yelnatS"

입출력 예 설명

 

입출력 예 #1

예제 1번의 my_string에서 인덱스 6부터 인덱스 12까지를 뒤집은 문자열은 "ProgrammerS123"이므로 "ProgrammerS123"를 return 합니다.

 

입출력 예 #2

 

예제 2번의 my_string에서 인덱스 4부터 인덱스 10까지를 뒤집으면 원래 문자열과 같은 "Stanley1yelnatS"이므로 "Stanley1yelnatS"를 return 합니다.


풀이

 

-> 뒤집어야하는 부분의 앞, 뒤 부분만 substring으로 잘라서 먼저 first와 third 변수에 저장해둔다. 그 후에 s, e 범위에 포함되는 부분만 반복문을 통해서 second에 뒤집은채로 담은 후 first + second + third를 해준다.


코드

 

class Solution {
    public String solution(String my_string, int s, int e) {
        String answer = "";
        int length = my_string.length();
        String first = my_string.substring(0, s);
        String second = "";
        String third = my_string.substring(e+1, length);
        System.out.println(my_string.charAt(s));
        for(int i=e;i>s-1;i--){
            second += my_string.charAt(i); 
        }
        answer = first + second + third ;
        return answer;
    }
}
반응형
반응형

문제 설명

 

어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다. 예를 들어, "banana"의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana"입니다. 문자열 my_string과 is_prefix가 주어질 때, is_prefix가 my_string의 접두사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.


제한사항

 

1 ≤ my_string의 길이 ≤ 100

1 ≤ is_prefix의 길이 ≤ 100

my_string과 is_prefix는 영소문자로만 이루어져 있습니다.


입출력 예

my_string is_prefix result
"banana" "ban" 1
"banana" "nan" 0
"banana" "abcd" 0
"banana" "bananan" 0

입출력 예 설명

 

입출력 예 #1

예제 1번에서 is_prefix가 my_string의 접두사이기 때문에 1을 return 합니다.

 

입출력 예 #2

예제 2번에서 is_prefix가 my_string의 접두사가 아니기 때문에 0을 return 합니다.

 

입출력 예 #3

예제 3번에서 is_prefix가 my_string의 접두사가 아니기 때문에 0을 return 합니다.

 

입출력 예 #4

예제 4번에서 is_prefix가 my_string의 접두사가 아니기 때문에 0을 return 합니다.


풀이

 

-> 삼항식을 통해서 is_prefix의 길이가 my_string보다 길다면 my_string의 길이를 length로 잡고, 그외에는 is_prefix의 길이를 length로 잡는다. 그 후 my_string을 index 0부터 length길이 만큼 substring으로 잘라 준 후에 is_prefix와 같은지 비교한다.


코드

 

class Solution {
    public int solution(String my_string, String is_prefix) {
        int answer = 0;
        int length = is_prefix.length()>my_string.length()?my_string.length():is_prefix.length();
        String temp = my_string.substring(0,length);
        if(temp.equals(is_prefix)){
            answer = 1;
        } else {
            answer = 0;
        }
        return answer;
    }
}
반응형
반응형

문제 설명

어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다. 문자열 my_string이 매개변수로 주어질 때, my_string의 모든 접미사를 사전순으로 정렬한 문자열 배열을 return 하는 solution 함수를 작성해 주세요.


제한사항

my_string은 알파벳 소문자로만 이루어져 있습니다.

1 ≤ my_string의 길이 ≤ 100


입출력 예

my_string result
"banana" ["a", "ana", "anana", "banana", "na", "nana"]
"programmers" ["ammers", "ers", "grammers", "mers", "mmers", "ogrammers", "programmers", "rammers", "rogrammers", "rs", "s"]

입출력 예 설명

입출력 예 #1

예제 1번의 my_string는 "banana"로 모든 접미사는 문제의 설명과 같습니다. 이를 사전순으로 정렬하면 "a", "ana", "anana", "banana", "na", "nana"이므로 ["a", "ana", "anana", "banana", "na", "nana"]를 return 합니다.

 

입출력 예 #2

예제 2번의 my_string는 "programmers"이고 모든 접미사는 "programmers", "rogrammers", "ogrammers", "grammers", "rammers", "ammers", "mmers", "mers", "ers", "rs", "s"입니다. 이를 사전순으로 정렬한 문자열 배열 ["ammers", "ers", "grammers", "mers", "mmers", "ogrammers", "programmers", "rammers", "rogrammers", "rs", "s"]를 return 합니다.


풀이

-> 먼저 temp배열을 만들어서 만들 수 있는 모든 접미사를 만들어서 담아준다. 그 후에 사전적 배열로 어떻게 만들지 고민을 많이 해봤는데 sort함수를 사용하니 간단하게 해결되었다. 그냥 사전순 배열은 어떻게 할 수 있을지 고민해보도록 해야겠다.


코드

import java.util.*;
class Solution {
    public String[] solution(String my_string) {
        String[] answer = {};
        int length = my_string.length();
        String[] temp = new String[length];
        for(int i=0; i<length;i++){
            temp[i] = my_string.substring(i, length);
        }
        Arrays.sort(temp); // temp 배열을 사전순으로 정렬
        answer = temp;
        return answer;
    }
}
반응형
반응형

문제 설명

문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.


제한사항

my_string은 영소문자로 이루어져 있습니다.

1 ≤ m  my_string의 길이 ≤ 1,000

m은 my_string 길이의 약수로만 주어집니다.

1 ≤ c  m


입출력 예

my_string m c result
"ihrhbakrfpndopljhygc" 4 2 "happy"
"programmers" 1 1 "programmers"

입출력 예 설명

입출력 예 #1

예제 1번의 my_string을 한 줄에 4 글자씩 쓰면 다음의 표와 같습니다.

1열 2열 3열 4열
i h r h
b a k r
f p n d
o p l j
h y g c

 

2열에 적힌 글자를 세로로 읽으면 happy이므로 "happy"를 return 합니다.

 

입출력 예 #2

예제 2번의 my_string은 m이 1이므로 세로로 "programmers"를 적는 것과 같고 따라서 1열에 적힌 글자를 세로로 읽으면 programmers입니다. 따라서 "programmers"를 return 합니다.


문제풀이

-> my_string을 몇줄로 나누는지를 계산해서 반복문을 통해 반복하고 해당 줄에서 몇번째 글자인지 index를 계산해 answer값에 더해준다.


코드

class Solution {
    public String solution(String my_string, int m, int c) {
        String answer = "";
        for(int i=0; i<my_string.length()/m;i++){
            answer += my_string.charAt(i*m+c-1);
        }
        return answer;
    }
}
반응형
반응형

문제 설명

두 정수 q, r과 문자열 code가 주어질 때, code의 각 인덱스를 q로 나누었을 때 나머지가 r인 위치의 문자를 앞에서부터 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.


제한사항

0 ≤ r < q ≤ 20

r < code의 길이 ≤ 1,000

code는 영소문자로만 이루어져 있습니다.


입출력 예

q r code result
3 1 "qjnwezgrpirldywt" "jerry"
1 0 "programmers" "programmers"

입출력 예 설명

입출력 예 #1

 

예제 1번의 q와 r은 각각 3, 1이고 인덱스와 그 값을 q로 나눈 나머지가 잘 보이도록 표로 만들면 다음과 같습니다.

 

code q j n w e z g r p i r l d y w t
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
q로 나눈 나머지 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0

q로 나눈 나머지가 1인 인덱스의 문자들을 앞에서부터 순서대로 이어 붙이면 "jerry"가 되므로 이를 return 합니다.

 

 

입출력 예 #2

예제 2번의 q와 r은 각각 1, 0이고 인덱스와 그 값을 q로 나눈 나머지가 잘 보이도록 표로 만들면 다음과 같습니다.codeprogrammers

code p r o g r a m m e r s
index 0 1 2 3 4 5 6 7 8 9 10
q로 나눈 나머지 0 0 0 0 0 0 0 0 0 0 0

q로 나눈 나머지가 1인 인덱스의 문자들을 앞에서부터 순서대로 이어 붙이면 "programmers"가 되므로 이를 return 합니다.


풀이

-> code의 길이만큼 반복되는 반복문을 작성한다. i=0부터 시작하며 index라고 생각하고 i를 q로 나눈 값을 remain이라고 하자. remain 값이 r과 같으면 answer에 해당 index의 문자를 더해준다.


class Solution {
    public String solution(int q, int r, String code) {
        String answer = "";
        int length = code.length();
        
        for(int i=0;i<length;i++){
            int remain = i % q;
            if(remain == r){
                answer += code.charAt(i);
            }
        }
        return answer;
    }
}
반응형

+ Recent posts