[Java] 프로그래머스 코딩테스트 입문 Day 9

2023. 1. 6. 06:08·알고리즘
사용언어 : Java
난이도 : Lv.0

 

1. 개미 군단

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

개미 군단이 사냥을 나가려고 합니다. 개미군단은 사냥감의 체력에 딱 맞는 병력을 데리고 나가려고 합니다. 장군개미는 5의 공격력을, 병정개미는 3의 공격력을 일개미는 1의 공격력을 가지고 있습니다. 예를 들어 체력 23의 여치를 사냥하려고 할 때, 일개미 23마리를 데리고 가도 되지만, 장군개미 네 마리와 병정개미 한 마리를 데리고 간다면 더 적은 병력으로 사냥할 수 있습니다. 사냥감의 체력 hp 가 매개변수로 주어질 때, 사냥감의 체력에 딱 맞게 최소한의 병력을 구성하려면 몇 마리의 개미가 필요한지를 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • hp는 자연수입니다.
  • 0 ≤ hp ≤ 1000

 

입출력 예

 

풀이

일개미가 공격력이 1이므로 먼저 공격력이 가장 높은 장군개미로 hp를 깎고, 남은 hp를 병정개미가 깎고, 남은 hp를 일개미가 깎을 수 있도록 풀이하였다.

class Solution {
    public int solution(int hp) {
        int answer = 0;
        int[] dps = {5, 3, 1};
        // 장군개미 : 공격력 5, 병정개미 : 공격력 3, 일개미 : 공격력 1
        for(int i = 0; i < dps.length; i++) {
            if (hp >= dps[i]) {
                answer += hp / dps[i];
                hp %= dps[i];
            }
        }
        return answer;
    }
}

 

더보기

다른 사람들의 풀이를 보니.. 이렇게 간단하게 적을 수가 있구나,,, 

class Solution {
    public int solution(int hp) {
        return hp / 5 + (hp % 5 / 3) + hp % 5 % 3;
    }
}

 

 


2. 모스 부호 (1)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter 가 매개변수로 주어질 때, 
letter 를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
모스부호는 다음과 같습니다.

 

제한사항

  • 1 ≤ letter의 길이 ≤ 1,000
  • return값은 소문자입니다.
  • letter의 모스부호는 공백으로 나누어져 있습니다.
  • letter에 공백은 연속으로 두 개 이상 존재하지 않습니다.
  • 해독할 수 없는 편지는 주어지지 않습니다.
  • 편지의 시작과 끝에는 공백이 없습니다.

 

입출력 예

 

풀이

우선 주어진 morse 부호를 String 변수로 복붙해서 쓸데없는 요소들은 replaceAll 함수 사용으로 지웠다. HashMap을 사용하기 위해 Key에 해당하는 morse 부호와 Value에 해당하는 알파벳 들을 구분해서 넣어주었다. 

String morse = "'.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f'," +
                "'--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l'," +
                "'--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r'," +
                "'...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x'," +
                "'-.--':'y','--..':'z'";

morse = morse.replaceAll("\\'","");
String[] morseArr = morse.split(":|,");
        
HashMap<String, String> map = new HashMap<>();
for(int i = 0; i < morseArr.length; i+=2) {
	map.put(morseArr[i], morseArr[i+1]);
}

 

그 뒤에는 공백으로 구분되어 있는 letter 변수를 잘라서 Hashmap에 있는 morse 부호에 맞는 값을 answer에 저장하도록 하였다.

String[] letterArr = letter.split(" ");

for(int i = 0; i < letterArr.length; i++) {
	answer += map.get(letterArr[i]);
}

 


3. 가위 바위 보

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp 가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

 

제한사항

  • 0 < rsp의 길이 ≤ 100
  • rsp와 길이가 같은 문자열을 return 합니다.
  • rsp는 숫자 0, 2, 5로 이루어져 있습니다.

 

입출력 예

 

풀이

풀이 방법은 위 문제와 동일하게 풀었다.

import java.util.*;
class Solution {
    public String solution(String rsp) {
        String answer = "";
        
        String[] s = rsp.split("");

        HashMap<String, String> map = new HashMap<>();
        map.put("2", "0");
        map.put("0", "5");
        map.put("5", "2");

        for(int i = 0; i < s.length; i++) {
            answer += map.get(s[i]);
        }
        
        return answer;
    }
}

 

 


4. 구슬을 나누는 경우의 수

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ balls ≤ 30
  • 1 ≤ share ≤ 30
  • 구슬을 고르는 순서는 고려하지 않습니다.
  • share ≤ balls

 

입출력 예

 

 

 

풀이

class Solution {
    public int combination(int n, int r) {
        if (r == 0 || n == r) {
            return 1;
        } else {
            return combination(n-1, r-1) + combination(n-1, r);
        }
    }
    public int solution(int balls, int share) {
        return combination(balls, share);
    }
}

 

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

[알고리즘] 바킹독 실전 알고리즘 0x03 배열 연습문제  (2) 2023.05.04
[Java] 프로그래머스 코딩테스트 입문 Day 10  (0) 2023.01.17
[Java] 프로그래머스 코딩테스트 연습 - 가장 가까운 같은 글자  (4) 2022.12.29
[Java] 프로그래머스 코딩테스트 입문 Day 8  (3) 2022.12.29
[Java] 프로그래머스 코딩테스트 연습 - 크기가 같은 부분 문자열  (0) 2022.12.23
'알고리즘' 카테고리의 다른 글
  • [알고리즘] 바킹독 실전 알고리즘 0x03 배열 연습문제
  • [Java] 프로그래머스 코딩테스트 입문 Day 10
  • [Java] 프로그래머스 코딩테스트 연습 - 가장 가까운 같은 글자
  • [Java] 프로그래머스 코딩테스트 입문 Day 8
하늘☁️
하늘☁️
개발일지, 학습, 스터디 기록 남기는 블로그 ☁️
  • 하늘☁️
    구름일지
    하늘☁️
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Java (3)
      • SQL (5)
      • 알고리즘 (31)
      • TIL (4)
      • CS (6)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
하늘☁️
[Java] 프로그래머스 코딩테스트 입문 Day 9
상단으로

티스토리툴바