문제 설명

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 pPoooyY면 true를 return 하고Pyy라면 false를 return 합니다.

 

제한사항

  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

 

입출력 예

s answer
"pPoooyY" true
"Pyy" false

 

입출력 예 설명

입출력 예 #1
'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.

입출력 예 #2
'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.

 

코드

import org.junit.Assert;
import org.junit.Test;

public class Q_12916 {
    boolean solution(String s) {
        boolean answer = true;
        char[] ch = s.toCharArray();
        int p = 0;
        int y = 0;

        for (int i = 0; i < ch.length; i++) {
            if (ch[i] == 'p' || ch[i] == 'P') {
                p++;
            } else if (ch[i] == 'y' || ch[i] == 'Y') {
                y++;
            }
        }

        if (p != y) {
            answer = false;
        }

        return answer;
    }

    @Test
    public void 정답() {
        Assert.assertTrue(solution("pPoooyY"));
        Assert.assertFalse(solution("Pyy"));
    }
}

 

풀이 방법

  • toCharArray() 메서드를 이용해 문자열을 char형 배열로 바꿔준다.
  • 그다음 문자 배열 하나씩 확인해주면 된다.

문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.

 

제한 조건

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

 

입출력 예

strings n return
["sun", "bed", "car"] 1 ["car", "bed", "sun"]
["abce", "abcd", "cdx"] 2 ["abcd", "abce", "cdx"]

 

입출력 예 설명

입출력 예 1
sun, bed, car의 1번째 인덱스 값은 각각 u, e, a 입니다. 이를 기준으로 strings를 정렬하면 [car, bed, sun] 입니다.

입출력 예 2
abce와 abcd, cdx의 2번째 인덱스 값은 c, c, x입니다. 따라서 정렬 후에는 cdx가 가장 뒤에 위치합니다. abce와 abcd는 사전순으로 정렬하면 abcd가 우선하므로, 답은 [abcd, abce, cdx] 입니다.

 

코드

import org.junit.Assert;
import org.junit.Test;

import java.util.*;

public class Q_12915 {
    public String[] solution(String[] strings, int n) {
        String[] answer = {};
        ArrayList<String> arrayList = new ArrayList<String>();

        for (int i = 0; i < strings.length; i++) {
            arrayList.add(strings[i].charAt(n) + strings[i]);
        }
        Collections.sort(arrayList);

        answer = new String[arrayList.size()];
        for (int i = 0; i < answer.length; i++) {
            answer[i] = arrayList.get(i).substring(1, arrayList.get(i).length());
        }

            return answer;
    }

    @Test
    public void 정답() {
        Assert.assertArrayEquals(new String[]{"car", "bed", "sun"}, solution(new String[]{"sun", "bed", "car"}, 1));
        Assert.assertArrayEquals(new String[]{"abcd", "abce", "cdx"}, solution(new String[]{"abce", "abcd", "cdx"}, 2));
    }
}

 

풀이 방법

  • n번째 인덱스의 값을 배열 값 앞에 더하고 정렬을 한다.
arrayList.add(strings[i].charAt(n) + strings[i]);
  • 정렬한 배열의 값들에서 n번째 인덱스의 값을 더한 것을 제외한 1번째 인덱스부터 값을 나타내면 된다.
answer[i] = arrayList.get(i).substring(1, arrayList.get(i).length());

문제 설명

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

 

제한 조건

  • a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
  • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
  • a와 b의 대소관계는 정해져있지 않습니다.

입출력 예

a b return
3 5 12
3 3 3
5 3 12

 

코드

import org.junit.Assert;
import org.junit.Test;

public class Q_12912 {
    public long solution(int a, int b) {
        long answer = 0;

        if (a <= b) {
            for (int i = a; i < b + 1; i++) {
                answer += i;
            }
        } else {
            for (int i = b; i < a + 1; i++) {
                answer += i;
            }
        }

        return answer;
    }

    @Test
    public void 정답() {
        Assert.assertEquals(12, solution(3, 5));
        Assert.assertEquals(3, solution(3, 3));
        Assert.assertEquals(12, solution(5, 3));
    }
}

문제 설명

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

 

제한사항

  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.

입출력 예

arr divisor return
[5, 9, 7, 10] 5 [5, 10]
[2, 36, 1, 3] 1 [1, 2, 3, 36]
[3,2,6] 10 [-1]

 

입출력 예 설명

입출력 예#1
arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다. 따라서 [5, 10]을 리턴합니다.

입출력 예#2
arr의 모든 원소는 1으로 나누어 떨어집니다. 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.

입출력 예#3
3, 2, 6은 10으로 나누어 떨어지지 않습니다. 나누어 떨어지는 원소가 없으므로 [-1]을 리턴합니다.

 

코드

import org.junit.Assert;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;

public class Q_12910 {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {-1};
        ArrayList<Integer> arrayList = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % divisor == 0) {
                arrayList.add(arr[i]);
            }
        }

        if (arrayList.isEmpty()) {
            return answer;
        } else {
            answer = new int[arrayList.size()];
            for (int i = 0; i < answer.length; i++) {
                answer[i] = arrayList.get(i);
            }
            Arrays.sort(answer);

            return answer;
        }
    }

    @Test
    public void 정답() {
        Assert.assertArrayEquals(new int[]{5, 10}, solution(new int[]{5, 9, 7, 10}, 5));
        Assert.assertArrayEquals(new int[]{1, 2, 3, 36}, solution(new int[]{2, 36, 1, 3}, 1));
        Assert.assertArrayEquals(new int[]{-1}, solution(new int[]{3, 2, 6}, 10));
    }
}

+ Recent posts