ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [올리브씨의 알고리즘 입문] Day 7 - 문자열, 조건문, 수학, 반복문
    알고리즘/프로그래머스_입문 2024. 4. 4. 02:45

    025. 특정 문자 제거하기

    문제 설명.

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

     

    제한 사항.

      1 ≤ my_string의 길이 ≤ 100

      letter은 길이가 1인 영문자입니다.
      my_string과 letter은 알파벳 대소문자로 이루어져 있습니다.
      대문자와 소문자를 구분합니다.

     

    입출력 예.

    my_string letter result
    "abcdef" "f" "abcde"
    "BCBdbe" "B" "Cdbe"

    풀이.

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

     

    다른 풀이.

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

     

    MAIN POINTS.

    더보기

    [개발 포인트]

    기본 함수 .replace(구 문자, 신 문자);.replaceAll(구 문자, 신 문자); 사용해보기


    026. 각도기

    문제 설명.

      각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.

    • 예각 : 0 < angle < 90
    • 직각 : angle = 90
    • 둔각 : 90 < angle < 180
    • 평각 : angle = 180

     

    제한 사항.

      0 < angle ≤ 180

      angle은 정수입니다.

     

    입출력 예.

    angle result
    70 1
    90 3
    180 4

    풀이.

    class Solution {
        public int solution(int angle) {
            int result=0;
            float d90 = (float)angle/90;
            
            //제한각도
            boolean flag = (0<angle && angle<=180);
            
            if (flag){
                if(d90<1) result = 1;
                if(d90==1) result = 2;
                if(d90>1 && d90<2) result = 3;
                if(d90==2) result = 4;
            }
            return result;
        }
    }

     

    다른 풀이.

    //간결한 풀이
    class Solution {
        public int solution(int angle) {
            return angle == 180 ? 4 : angle < 90 ? 1 : angle == 90 ? 2 : angle > 90 ? 3 : 0;
        }
    }
    //내가 관심있어했던 다른 풀이
    class Solution {
        public int solution(int angle) {
            int answer = 0;
            if (angle <= 90){
                answer = angle/90 + 1;
            }
            else {
                answer = (int)Math.ceil(((double)angle+0.1)/90)+1;
            }
            return answer;
        }
    }
    //직관적인 풀이
    class Solution {
        public int solution(int angle) {
            int answer = 0;
            String gak = null;
            if(0 < angle && angle < 90){
                gak = "예각";
            };
            if(angle == 90){
                gak = "직각";
            };
            if(90 < angle && angle < 180){
                gak = "둔각";
            };
            if(angle == 180){
                gak = "평각";
            };
    
    
            switch(gak){
                case "예각":
                    answer = 1;
                    break;
                case "직각":
                    answer = 2;
                    break;
                case "둔각":
                    answer = 3;
                    break;
                case "평각":
                    answer = 4;
                    break;
            }
            return answer;
        };
    }

     

    MAIN POINTS.

    더보기

    [개발 포인트]

    구간을 나눌 수 있는 새로운 방법 모색해 보기 (발상의 전환!)


    027. 양꼬치

    문제 설명.

      머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

     

    제한 사항.

      0 < n < 1,000
      n / 10 ≤ k < 1,000
      서비스로 받은 음료수는 모두 마십니다.

     

    입출력 예.

    n k result
    10 3 124,000
    64 6 768,000

    풀이.

    class Solution {
        public int solution(int n, int k) {
    
            return (k-n/10)*2000+12000*n;
        }
    }

     

    다른 풀이.

    //코코몽 님의 객체지향 코드
    class Solution {
        public int solution(int n, int k) {
            int lambTotalPrice = totalPrice(Menu.LAMB, n);
            int drinkTotalPrice = totalPrice(Menu.DRINK, k);
            int discountPrice = discount(Menu.DRINK, n);
    
            int totalPay = lambTotalPrice + drinkTotalPrice - discountPrice;
            return totalPay;
        }
    
        private int totalPrice(Menu menu, int quantity) {
         return menu.getPrice() * quantity;   
        }
    
        private int discount(Menu menu, int lambQuantity) {
            // 양꼬치 10인분에 음료수 하나
            int point = lambQuantity / 10;
    
            return menu.getPrice() * point;
        }
    }
    
    enum Menu {
    
        LAMB("양꼬치", 12000),
        DRINK("음료수", 2000);
    
        private final String name;
        private final int price;
    
        Menu(String name, int price) {
            this.name = name;
            this.price = price;
        }
    
        public String getName() {
            return name;
        }
    
        public int getPrice() {
            return price;
        }
    }

     

    MAIN POINTS.

    더보기

    [개발 포인트]

    간단 풀이도 좋지만 객체지향에 대해 공부해 볼 수 있는 문제.


    028. 짝수의 합

    문제 설명.

      정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

     

    제한 사항.

      0 < n ≤ 1000

     

    입출력 예.

    n result
    10 30
    4 6

    풀이.

    class Solution {
        public int solution(int n) {
            
            int evenSum = 0;
            boolean nCheck = (0<n && n<=1000);
            boolean even = (n%2==0);
            
            if(nCheck){
                if(even){
                    for(int i=2; i<=n; i+=2){
                        evenSum += i;
                    }
                }else{
                    for(int j=2; j<=n-1; j+=2){
                        evenSum += j;
                    }
                }
            }
            return evenSum;
        }
    }

     

    다른 풀이.

    class Solution {
        public int solution(int n) {
            int answer = 0;
            for(int i=2; i<=n; i+=2){
                answer+=i;
            }
            return answer;
        }
    }
    //함수형 풀이
    import java.util.stream.IntStream;
    class Solution {
        public int solution(int n) {
            return IntStream.rangeClosed(0, n)
                .filter(e -> e % 2 == 0)
                .sum();
        }
    }

     

    MAIN POINTS.

    더보기

    [개발 포인트]

    다양한 접근법으로 생각해 볼 것.


    출처 :https://school.programmers.co.kr/ 입문 알고리즘

    https://school.programmers.co.kr/learn/challenges/beginner?order=acceptance_desc&languages=java

Designed by Tistory.