programmers 기초 Day19

Hwani·2024년 6월 19일

프로그래머스 DAY 1~25

목록 보기
45/51

문제 - 세 개의 구분자

풀이

import java.util.*;

class Solution {
    public String[] solution(String myStr) {
        List<String> answer = new ArrayList<>();
        
        myStr = myStr.replace("a"," ");
        myStr = myStr.replace("b"," ");
        myStr = myStr.replace("c"," ");
        String[] list = myStr.split(" ");
        
        for (String i : list)
            if (!i.equals(""))
                answer.add(i);
        
        if (answer.size()==0) answer.add("EMPTY");
        
        return answer.toArray(new String[0]);
    }
}

설명

a,b,c를 구분자로 사용하여 매개변수 문자열을 a,b,c로 나누어 배열에 담아 리턴하는 문제

  • a,b,c를 공백으로 대체한다.
  • 공백을 기준으로 나눈다.
  • for문으로 배열에 담긴 값을 String 타입으로 저장하고 공백이 아닌것을 ArrayList에 담는다.
  • 두 구분자에 아무것도 안 담겨있다면 EMPTY를 반환하니까 그 조건에 맞게 설정하고
    answer 배열을 리턴한다.

문제 - 배열의 원소만큼 추가하기

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> list = new ArrayList<>();

        for (int num : arr) {
            for (int i = 0; i < num; i++) {
                list.add(num);
            }
        }
        
        int[] result = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }

        return result;
    }
}

설명

배열에 있는 숫자를 그 갯수만큼 배열에 담아 리턴하는 문제

  • 외부 for문으로 arr을 순회하고
  • 내부 for문으로 list에 num 값만큼 num을 추가
  • List에 담긴 값을 배열에 담아 리턴한다.

문제 - 빈 배열에 추가, 삭제하기

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        ArrayList<Integer> list = new ArrayList<>();

        for (int i = 0; i < flag.length; i++) {
            if (flag[i]) {
                for (int j = 0; j < arr[i] * 2; j++) {
                    list.add(arr[i]);
                }
            } else {
                for (int j = 0; j < arr[i]; j++) {
                    if (!list.isEmpty()) {
                        list.remove(list.size() -1);
                    }
                }
            }
        }
        
        int[] answer = new int[list.size()];
        for (int i = 0; i < answer.length; i++) {
            answer[i] = list.get(i);
        }
        return answer;
    }
}

조건
arr[i] 값과 flag[i] 값을 비교하여

  • flag[i]가 true면 arr[i]값을 *2하기
  • flag[i]가 false면 arr[i]만큼 제거하기

설명

  • ArrayList 생성
  • flag[i] 가 true라면 arr[i]*2 값을 list에 추가
  • flag[i] 가 false라면 arr[i]값을 제거하기
  • list에 담긴 값을 배열에 추가하여 리턴

문제 - 배열 만들기 6

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> list = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            if (list.isEmpty()) {
                list.add(arr[i]);
            } else if (list.get(list.size() -1) == arr[i]) {
                list.remove(list.size() -1);
            } else {
                list.add(arr[i]);
            }
        }

        if (list.isEmpty()) {
            list.add(-1);
        }
        
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        return answer;
    }
}

조건

  • stk가 빈 배열이라면 arr[i]+1 추가
  • stk의 마지막 원소가 arr[i]와 같다면 stk의 마지막 값 제거 후 i+1
  • stk의 마지막 원소가 arr[i]와 다르면 stk의 마지막에 arr[i]+1 추가
  • 빈 배열이라면 -1 리턴

설명

  • ArrayList 생성
  • for문으로 각 조건에 맞게 조건문 생성
  • list를 배열에 저장하여 리턴

문제 - 무작위로 K개의 수 뽑기

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int k) {
        HashSet<Integer> set = new HashSet<>();
        int[] answer=new int[k];
        
        int count=0;
        for(int i=0; i<arr.length; i++) {
            if(!set.contains(arr[i])) {
                set.add(arr[i]);
                answer[count]=arr[i];
                count++;
            }
            if(count==k) {
                break;
            }
        }
        for(int i=count; i<k; i++) {
            answer[i]=-1;
        }
        return answer;
    }
}

설명

  • 중복된 값을 제거하기 위한 HashSet 객체 set을 생성
  • 중복값이 없을경우 if수행, count가 k와 같아지면 반복문 탈출
  • 2번째 반복문을 통해 answer의 빈자리를 -1로 채운다.
profile
개발자될거야

0개의 댓글