[Java 8] 코딩 기초 트레이닝 Day 19 split & 정규식, ArrayList

2024. 12. 17. 13:07·Java

세 개의 구분자


다음과 같은 문제 역시 어제 다뤘던 내용과 같이 split 에 관한 내용인데, 정규 표현식을 아직 배우지 않은 분들이라면, if 문으로 하나하나 필터링 해야하나 생각하실 수 있습니다.

하지만 자바에는 정규 표현식이라는 것이 존재합니다. 

String[] result = myStr.split("[abc]"); //myStr = "baconlettucetomato";

[abc] 는 대괄호 안에 포함된 문자들 중 하나의 문자와 일치하는 경우를 의미합니다.

// result = ["", "onlettu", "etom", "to"]

우리가 이 정규 표현식을 몰라다면 너무 번거롭게 코드를 작성했을텐데, 알고 모르고의 차이가 큰 것 같습니다. 그래서 위의 문제는 아래와 같이 풀 수 있습니다.

import java.util.Arrays;

class Solution {
    public String[] solution(String myStr) {
        
        String[] result = Arrays.stream(myStr.split("[abc]")) 
            .filter(s -> !s.isEmpty()) 
            .toArray(String[]::new); 
        
        return result.length == 0 ? new String[]{"EMPTY"} : result; 
    }
}

빈 배열에 추가, 삭제하기


이런 문제는 별다른 방법이 없습니다. 시간 복잡도가 O( i * j ) 가 나올 수 밖에 없는 문제입니다

List 를 하나 생성해서 true 면 그 안에서 for문으로 add를 수행하고, false면 remove로 제거하면 되는 간단한 문제 입니다

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        ArrayList<Integer> list = new ArrayList<>();
        
        for(int i=0; i<arr.length; i++){
            if(flag[i] == true){
                for(int j=0; j<arr[i]*2; j++){
                    list.add(arr[i]);
                }
            }else{
                for (int j = 0; j < arr[i]; j++) {
                    list.remove(list.size() - 1);
                }
            }
        }
        
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

배열 만들기 6


이런 지저분한 문제는 하나하나 풀어나가는 게 중요합니다.

문제에서 요구하는 것과 같이 stk라는 리스트를 만들어주고 i 도 0으로 초기화 해줍니다.

문제를 위에서 아래로 읽으면서 자연스럽게 코딩을 하면 됩니다.

이런 문제의 의도는 이 사람이 글로 작성되어 있는 내용을 코드로 구현할 수 있는 지를 본다고 생각합니다. 그럼 아래와 같은 코드가 작성됩니다

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> stk = new ArrayList<>();
        int i = 0;
        
        while(i<arr.length){
            if(stk.size() == 0){
                stk.add(arr[i]);
                i++;
            }else if(stk.size() != 0 && stk.get(stk.size() - 1)==arr[i]){
                stk.remove(stk.size()-1);
                i++;
            }else{
                stk.add(arr[i]);
                i++;
            }
        }
        
        if(stk.size() == 0) stk.add(-1);
        
        return stk.stream().mapToInt(Integer::intValue).toArray();
    }
}

무작위로 K개의 수 뽑기


글을 위에서 아래로 읽는 것처럼 코드도 위에서 아래로 짜여지죠? 그냥 번역한다고 생각하시면 될 것 같아요. 그대로 번역해서 옆칸으로 옮기는 거죠. 이 문제도 특별한 부분은 없는 것 같네요. 아래처럼 작성하면 됩니다

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr, int k) {
        ArrayList<Integer> result = new ArrayList<>();
        
        for(int i : arr){
            if(result.size() == k) break;
            if(!result.contains(i)) result.add(i);
        }
        
        if(result.size() < k){
            while(result.size() < k){
                result.add(-1);
            }
        }
        
        return result.stream().mapToInt(Integer::intValue).toArray();
    }
}

 

느낀 점


코딩이라는 것이 정말 뭐 대단한 것이 없는 거 같아요. 코딩은 글을 번역하는 거라고 생각합니다. 우리가 파파고를 사용할 시절 한글을 넣으면 옆에 영어로 문장이 나오는 것과 같이, 우리는 컴퓨터랑 대화할 수 있는 언어를 배우는 것이고, 한글로 작성되어 있는 문제를 코드로 나열하는 것을 코딩한다라고 하는 것이고 그 중에서도 가독성 있게 클린하게 클린 코드를 작성하는 사람들을 기업에서 찾는 것이 아닌가 생각해봅니다.

저작자표시 비영리 변경금지 (새창열림)
'Java' 카테고리의 다른 글
  • [Java] JDK, JRE, JVM 뿌수기 그리고 자바 패키지 생성 및 실행 과정
  • [Java8] 코딩 기초 트레이닝 Day 20 highestOneBit(), stream(), HashMap 활용
  • [Java 8] 프로그래머스 코딩테스트 연습 split(), replace()
  • [Java] Null & 예외 (Exception) 기초 및 정의 | Checked & Unchecked
Jelong
Jelong
커스텀 웹: https://jaehong-park.com Github: https://github.com/qkrwoghd04
  • Jelong
    24/7 Developer's Note
    Jelong
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Software Engineering
      • Ubuntu
      • Network
      • JavaScript
      • Web
      • Interaction Design
      • React Native
      • React
      • Algorithm
      • Java
      • Database design
      • IT Trend
      • TroubleShooting
      • AWS
      • Interview
      • LG CNS AM CAMP 1기
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    소프트웨어 공학
    ChatGPT
    블랙 박스 테스트
    알고리즘 분석
    JS
    BST
    html
    java
    React
    css
    자바스크립트
    AWS
    frontend
    데이터 구조
    javascript
    mininet
    오블완
    화이트 박스 테스트
    GPT-4
    generic
    expo
    이진트리
    heap
    미니넷
    자바
    prototyping
    알고리즘
    typescript
    Queues
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Jelong
[Java 8] 코딩 기초 트레이닝 Day 19 split & 정규식, ArrayList
상단으로

티스토리툴바