공log/[P&B]

[P&B] #12 PreCodingTest

ming_OoO 2023. 7. 30. 22:10
728x90

프리코딩테스트 1-2

 

2) Reverse Sentence

오답 노트 코드

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

public class PrePractice02_02 {
    public static String[] solution(String s) {
        String[] split = s.split("[.,!?\\\\s]+");
        ArrayList<String> list = new ArrayList();

        for (String str: split) {
            if (!str.isEmpty()) {
                StringBuffer sb = new StringBuffer(str);
                String reverse = sb.reverse().toString();
                list.add(reverse);
            }
        }
        return list.toArray(new String[list.size()]);
    }

    public static void main(String[] args) {
        System.out.println(Arrays.toString(solution("Hello, Wrold!")));
    }
}

 

 

문제 풀이 코멘트

 이 문제를 처음 접했을 때 구분자를 사용하는 점에 있어 어려움을 느꼈다. 내가 생각한 대로 문자열이 나뉘지 않아 다음 단계로 넘어갈 수 없었다. [.,!?\\\\s]+ 와 같이 내가 원하는 대로 구분할 수 있는 구분자들을 좀 더 많이 알아둬야겠다.

 

2) Nth Canceled Order

오답 노트 코드

import java.util.*;
public class PrePractice02_04 {
    public static int solution(int[] orders, int n) {
        int answer = 0;
        List<Integer> list = new ArrayList<>();
        for(int i : orders) {
            list.add(i);
        }
        for(int i = 1; i <= 1000; i++) {
            if(list.contains(i)) {
                continue;
            } else {
                n--;
            }

            if(n == 0) {
                answer = i;
                break;
            }
        }
        return answer;
    }

    public static void main(String[] args) {
        System.out.println(solution(new int[]{2,3,4,7},3));
    }

}

 

문제 풀이 코멘트

처음에는 1부터 배열의 가장 마지막 숫자까지 for문으로 돌리면서 없는 숫자들을 카운트하며 저장하여 카운트가 n이 되면 저장된 숫자를 반환하려고 했다. 그런데 order[i]와 i를 비교군으로 두어 코딩이 이상하게 되었다. 내가 생각하는 방식대로 한다면

import java.util.*;
public class PrePractice02_04 {
    public static int solution(int[] orders, int n) {
        HashSet<Integer> cancelledOrders = new HashSet<>();
        for (int order : orders) {
            cancelledOrders.add(order);
        }

        int count = 0;
        for (int i = 1; i <= orders.length + n; i++) {
            if (!cancelledOrders.contains(i)) {
                count++;
            }
            if (count == n) {
                return i;
            }
        }
        return -1; // 주문 번호를 찾지 못한 경우 -1 반환
    }

    public static void main(String[] args) {
        System.out.println(solution(new int[]{2,3,4,7},3));
    }

}

이렇게 될 것이다. 어찌되었든 위의 코드와 유사하게 배열의 모든 숫자들을 list나 set에 넣어 1부터 1씩 증가하는 i가 list나 set에 포함되어 있는지를 확인하여 카운트를 세는 방식이 되어야 한다. for문을 생각하는 과정에 있어서 아쉬운 문제였다.

728x90

'공log > [P&B]' 카테고리의 다른 글

[P&B] #14 Programmers  (0) 2023.08.01
[P&B] #13 PreCodingTest  (0) 2023.07.31
[P&B] #11 PreCodingTest  (0) 2023.07.29
[P&B] #10 PreCodingTest  (0) 2023.07.28
[P&B] #9 Programmers  (0) 2023.07.27