Programmers #3

이강용·2023년 1월 26일
0

Programmers

목록 보기
3/58
post-thumbnail

피자 나눠 먹기 (3)

문1) 머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주어질 때, n명의 사람이 최소 한 조각 이상 피자를 먹으려면 최소 몇 판의 피자를 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요.

slicenreuslt
7102
4123

입출력 예 #1

  • 10명이 7조각으로 자른 피자를 한 조각 이상씩 먹으려면 최소 2판을 시켜야 합니다.

입출력 예 #2

  • 12명이 4조각으로 자른 피자를 한 조각 이상씩 먹으려면 최소 3판을 시켜야 합니다.

📌 나의 풀이

class Solution {
    public int solution(int slice, int n) {
        int result = 0;
        
        if(n % slice == 0){  
        result = n / slice;  
        }else{
        result = ( n / slice ) + 1;
        }
        return result;
    }
}

🎈 idea

조각을 사람으로 나누어서 딱 나누어 떨어지면 나눈 몫을 리턴하고, 나눈 나머지가 0이 아니면, 몫 +1 을 하면 최소 시켜야 하는 피자를 알 수 있다.


피자 나눠 먹기 (1)

문2) 머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

nreuslt
71
11
153

📌 나의 풀이

class Solution {
    public int solution(int n) {
        
        int piece  = 7;
        int answer = 0;
        
        if(n % piece == 0){
            answer = n / piece ;
        }else{
            answer = (n / piece) + 1;
        }
        
        return answer;
    }
}

아이스 아메리카노

문3) 머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한잔에 5,500원입니다. 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.

moneyresult
5,500[1,0]
15,000[2,4000]

📌나의 풀이

class Solution {
    public int[] solution(int money) {
        
        int[] answer = new int[2];
        int count = 0;
        int payback = 0;
         count = money/5500 ;
         payback = money - (count * 5500);
        
         answer[0] = count ;
         answer[1] = payback;
        
        return answer;
    }
}

🎈 idea

count = money/5500 ;  
payback = money - (count * 5500);

매개변수 money / 5500 하면 몫이 나오는데 이것을 count (잔 수), 돌려받을 금액은
money에서 잔수*한잔의 금액을 빼면 돌려받을 금액을 알 수 있다.

📌쇼킹한 풀이

class Solution {
    public int[] solution(int money) {
        return new int[] { money / 5500, money % 5500 };
    }
}

문자열 뒤집기

문4) 문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

my_stringreturn
"jaron""noraj"
"bread""daerb"

나의 풀이

class Solution {
    public String solution(String my_string) {
        String answer = "";
        for(int i = my_string.length()-1; i >= 0; i--){
            answer += my_string.substring(i,i+1);
        }
        return answer;
    }
}

ideal

import java.util.*;

class Solution {
    public String solution(String my_string) {
        StringBuilder sb = new StringBuilder();
        sb.append(my_string);
        sb.reverse();

        return sb.toString();
    }
}

특정 문자 제거하기

문5) 문자열 my_string과 문자 letter이 매개변수로 주어집니다. my_string에서 letter를 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

my_stringletterresult
"abcdef""f""abcde"
"BCBdbe""B""Cdbe"

나의 풀이

class Solution {
    public String solution(String my_string, String letter) {
       
		String[] arr = my_string.split("");
		String answer = "";
		
		
		for(int i = 0; i<arr.length; i++) {
			
			if(arr[i].equals(letter)) {
				continue;
			}else {
				answer += arr[i];
				}
		}
		return answer;
		}
   }

매개 변수 my_string은 문자열이다. 매개변수로 받은 문자열을 배열로 짤라 넣는다.
.split() method 를 이용하여 한글자 단위로 쪼개어 String[] str 배열에 넣는다.
arr[i].equals (letter) 에서 특정 문자와 같은지 비교하여 같으면 continue
다르면 answer 문자열에 arr[i] 값을 더해준다.

ideal

class Solution {
    public String solution(String my_string, String letter) {
      String answer = "";
        answer = my_string.replaceAll(letter, "");
        return answer;
    }
}

String 문자열에 replaceAll 메서드를 이용하여 특정문자를 빼고 재배열하는 방법을 사용


짝수는 싫어요

문6) 정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.

nresult
10[1,3,5,7,9]
15[1,3,5,7,9,11,13,15]

입출력 #1
10 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9]를 return합니다.

입출력 #2
15 이하의 홀수가 담긴 배열 [1, 3, 5, 7, 9, 11, 13, 15]를 return합니다.

나의 풀이

class Solution {
    public int[] solution(int n) {
        int[] answer;
        int j = 0;
        
        if(n % 2 == 0){ // even
            answer = new int[n/2];
        }else{ //odd
            answer = new int[n/2+1];
        }
            
            
        for(int i = 0; i <= n; i++){
            
           if(i % 2 == 1){
               answer[j] = i;
               j++;
           }
            
        }
             
        return answer;
    }
}

나의 생각
1차원적으로 너무 배열만을 생각한 문제인거같다. java에선 배열 이외에도 Array, ArrayList 등 더 쉽게 표현할 수 있는 방법들이 있지만 응용을 생각하지 않고 기본에서 머물러있다는 느낌이 든다. 알고리즘 문제를 생각할 때 더 쉽게 표현할 수 있거나, 더 간단한 방법을 우선적으로 생각하자!

정수 n이 매개변수로 주어지고, 이를 사용하여 배열의 Size를 할당해야하는데, n % 2 는
n을 2로 나눈 나머지가 0이면 짝수(Even), 아니면 홀수(Odd)로 배열 사이즈를 달리했다.
그리고 반복문을 수행하여 for문 내 지역변수 i가 2로 나눈 나머지가 1이면, 홀수이기때문에
그때의 i값을 answer[j] 배열에 넣는 방법을 사용하였다. (j 변수 초기화 할 것)

ideal

import java.util.*;

class Solution {
    public ArrayList solution(int n) {
        ArrayList<Integer> answer = new ArrayList<Integer>();

        for(int i=1; i<=n; i++){
          if(i % 2 != 0) {
              answer.add(i);
          } 
        }

        return answer;
    }
}

ArrayList를 사용하여 배열의 크기를 가변적으로 할당할 필요가 없어졌다. why??
ArrayList는 .add .remove method를 통해 언제든지 배열의 크기를 가변적으로 키우거나 줄일 수 있는 장점이 있음 !
따라서, if( i % 2 != 0) 즉, 나머지가 1이면(홀수이면) .add만 하면 된다

profile
HW + SW = 1

0개의 댓글