[프로그래머스] 기초 문제 풀이 (0 떼기, 치킨 쿠폰, 간단한 식 계산하기, 세 개의 구분자, 배열의 원소만큼 추가하기, 무작위로 K개의 수 뽑기)

2024. 11. 19. 18:43·알고리즘

0 떼기

사용 언어 : Java
레벨 : 0
📎https://school.programmers.co.kr/learn/courses/30/lessons/181847
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

정수로 이루어진 문자열 n_str이 주어질 때, n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 2 ≤ n_str ≤ 10
  • n_str이 "0"으로만 이루어진 경우는 없습니다.

 

입출력 예

 

풀이

class Solution {
    public String solution(String n_str) {
        int idx = 0;
        
        for(int i = 0; i < n_str.length(); i++) {
            if(n_str.charAt(i) != '0') {
                idx = i;
                break;
            }
        }
        return n_str.substring(idx, n_str.length());
    }
}

 

다른 사람들의 풀이도 봤는데 Integer.parseInt 를 사용하여 앞에 0이 잘리도록 푸신 분들도 계셨다.. 개고수 ㄷㄷ

 

 

치킨 쿠폰 

사용 언어 : Java
레벨 : 0
📎https://school.programmers.co.kr/learn/courses/30/lessons/120884
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • chicken은 정수입니다.
  • 0 ≤ chicken ≤ 1,000,000

 

입출력 예

풀이

class Solution {
    public int solution(int chicken) {
        int answer = 0;
        while (chicken >= 10) {
            answer += chicken / 10;
            chicken = chicken / 10 + chicken % 10;
        }
        return answer;
    }
}

 

간단한 식 계산하기 

사용 언어 : Java
레벨 : 0
📎https://school.programmers.co.kr/learn/courses/30/lessons/181865
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.

 

제한사항

  • 0 ≤ a, b ≤ 40,000
  • 0을 제외하고 a, b는 0으로 시작하지 않습니다.

 

입출력 예

풀이

class Solution {
    public int solution(String binomial) {
        String[] arr = binomial.split(" ");

        switch (arr[1]) {
            case "+":
                return(Integer.parseInt(arr[0]) + Integer.parseInt(arr[2]));
            case "-":
                return(Integer.parseInt(arr[0]) - Integer.parseInt(arr[2]));
            default:
                return(Integer.parseInt(arr[0]) * Integer.parseInt(arr[2]));
        }
    }
}

 

세 개의 구분자  

사용 언어 : Java
레벨 : 0
📎https://school.programmers.co.kr/learn/courses/30/lessons/181862
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.
예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.
문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.
단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.

 

제한사항

  • 1 ≤ myStr의 길이 ≤ 1,000,000
  • myStr은 알파벳 소문자로 이루어진 문자열 입니다.

 

입출력 예

풀이

나는 우선 a b c 가 들어간 부분을 split을 이용해 배열로 나눠주고 ArrayList 변수를 생성해서 값이 공백이 아니면 list에 추가해주고 그 list를 반환해주도록 풀었다. 

import java.util.ArrayList;
import java.util.Arrays;
class Solution {
    public String[] solution(String myStr) {
        String[] strArr = myStr.split("a|b|c");
        ArrayList<String> list = new ArrayList<>();
        for(String item: strArr) {
            if(!item.equals("")) 
                list.add(item);
        }
        
        if(list.size() == 0) {
            list.add("EMPTY");
         }
        
        String[] answer = list.toArray(new String[list.size()]);
        return answer;
    }
}

 

 

다른 분의 풀이를 보니 이런 방식도 있었다.

 

package codingtest1.day3;

import java.util.Arrays;

public class Test4 {
    public static void main(String[] args) {
        String myStr = "baconlettucetomato";
        myStr = myStr.replaceAll("[a|b|c]+", " ");
        myStr = myStr.charAt(0) == ' ' ? myStr.substring(1) : myStr;
        myStr = myStr == " " ? "EMPTY" : myStr;

        System.out.println(Arrays.toString(myStr.split(" ")));
    }
}

 

진짜 대단..

 

 

배열의 원소만큼 추가하기 

사용 언어 : Java
레벨 : 0
📎https://school.programmers.co.kr/learn/courses/30/lessons/181861
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 양의 정수 배열 arr가 매개변수로 주어질 때, arr의 앞에서부터 차례대로원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성해주세요.

 

제한사항

  • 1 ≤ arr의 길이 ≤ 100
  • 1 ≤ arr의 원소 ≤ 100

 

입출력 예

풀이

import java.util.ArrayList;
class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0; i < arr.length; i++) {
            for(int j = 0; j < arr[i]; j++) {
                list.add(arr[i]);
            }
        }
        
        return list.stream().mapToInt(i -> i).toArray();
    }
}

 

 

무작위로 K개의 수를 뽑기 

사용 언어 : Java
레벨 : 0
📎https://school.programmers.co.kr/learn/courses/30/lessons/181858
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 합니다. 적절한 방법이 떠오르지 않기 때문에 일정한 범위 내에서 무작위로 수를 뽑은 후, 지금까지 나온적이 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 합니다.
이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k의 배열을 예상해봅시다.
정수 배열 arr가 주어집니다. 문제에서의 무작위의 수는 arr에 저장된 순서대로 주어질 예정이라고 했을 때, 완성될 배열을 return 하는 solution 함수를 완성해 주세요.
단, 완성될 배열의 길이가 k보다 작으면 나머지 값을 전부 -1로 채워서 return 합니다.

 

제한사항

  • 1 ≤ arr의 길이 ≤ 100,000
    • 0 ≤ arr의 원소 ≤ 100,000
  • 1 ≤ k ≤ 1,000

 

입출력 예

풀이

사실 문제는 그렇게 어렵지 않았는데 k개의 숫자만큼 채우질 못하면 빈 공간에는 -1로 채우라는 부분 때문에 살짝 고민이 길어졌던 것 같다. 풀 수는 있는데 어떻게 쉽고 간단하게 짜지..? 라는 생각을 좀 많이 했던..?

import java.util.ArrayList;
import java.util.Arrays;
class Solution {
    public int[] solution(int[] arr, int k) {
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0; i < arr.length; i++) {
            if(!list.contains(arr[i]) && list.size() < k) {
                list.add(arr[i]);
            }
        }

        int size = list.size();

        if(list.size() < k) {
            for(int i = 0; i < k - size; i++) {
                list.add(-1);
            }
        }
        return list.stream().mapToInt(i -> i).toArray();
    }
}

'알고리즘' 카테고리의 다른 글

[프로그래머스] 기초 문제 풀이 (조건에 맞게 수열 변하기 2, 1로 만들기, 문자열이 몇 번 등장하는지 세기)  (1) 2024.12.06
[백준/Java] #11659 구간 합 구하기 4, #11660 구간 합 구하기 5  (0) 2024.11.25
[프로그래머스] 기초 문제 풀이 (두 수의 합, 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기, ad 제거하기, 접미사인지 확인하기, 공백으로 구분하기 1, X 사이의 개수)  (0) 2024.11.18
[프로그래머스/Java] 코딩 기초 트레이닝 복습  (0) 2024.09.12
[백준/Java] #14503 로봇 청소기  (0) 2023.06.20
'알고리즘' 카테고리의 다른 글
  • [프로그래머스] 기초 문제 풀이 (조건에 맞게 수열 변하기 2, 1로 만들기, 문자열이 몇 번 등장하는지 세기)
  • [백준/Java] #11659 구간 합 구하기 4, #11660 구간 합 구하기 5
  • [프로그래머스] 기초 문제 풀이 (두 수의 합, 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기, ad 제거하기, 접미사인지 확인하기, 공백으로 구분하기 1, X 사이의 개수)
  • [프로그래머스/Java] 코딩 기초 트레이닝 복습
하늘☁️
하늘☁️
개발일지, 학습, 스터디 기록 남기는 블로그 ☁️
  • 하늘☁️
    구름일지
    하늘☁️
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Java (3)
      • SQL (5)
      • 알고리즘 (31)
      • TIL (4)
      • CS (6)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    cpu의작동원리
    pccp 기출문제 3번
    dna 비밀번호
    코딩테스트연습
    코딩테스트
    제로베이스부트캠프
    회고
    백준
    boj1377
    알고리즘
    boj12891
    boj5427
    비순차적명령어처리기법
    CS
    명령어파이프라인
    충돌위험 찾기
    스터디기록
    java
    상속
    mysql
    제로베이스백엔드스쿨
    db
    프로그래머스
    정적블록
    제로베이스백엔드스쿨초단기취업반
    코딩테스트입문
    TIL
    컴퓨터구조
    학습일지
    boj10986
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
하늘☁️
[프로그래머스] 기초 문제 풀이 (0 떼기, 치킨 쿠폰, 간단한 식 계산하기, 세 개의 구분자, 배열의 원소만큼 추가하기, 무작위로 K개의 수 뽑기)
상단으로

티스토리툴바