07.30 pre-edu

5145 단어 TILTIL

기초 알고리즘 Part 1

1.두 정수 사이의 합

두 정수 a,b가 주어졌을때 a와 b사이에 속한 모든 정수의 합을 리턴하는 함수
두 정수의 대소관계가 정해져 있지않기때문에 분기문으로 해결했다

class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        if(a < b){
            for(int i = a; i <= b; i++){
                answer += i;
            }
        }else {
            for(int i = b; i <= a; i++){
                answer += i;
            }
        }
        return answer;
    }
}

2.수박수박수박수박수박수?

길이가 n이고, "수박수박수...."와같은 패턴을 유지하는 문자열을 리턴하는 함수를 완성하시오. 예를들어 n이 4이면 "수박수박" 3이면 "수박수"

class Solution {
    public String solution(int n) {
        String answer = "";
        for(int i = 1; i <= n; i++){
            if (i % 2 == 0){
                answer += "박";
            } else {
                answer += "수";
            }
        }
        return answer;
    }
}

3.서울에서 김서방 찾기

Stirng형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수 seoul에 "Kim"은 오직 한번만 나타난다.
equals라는 메소드를 기억못해서 좀 해맸다.

class Solution {
    public String solution(String[] seoul) {
        String answer = "";
        for(int i = 0; i < seoul.length; i++){
            if(seoul[i].equals("Kim")){
                answer = String.format("김서방은 %d에 있다",i);
            }
        }
        return answer;
    }
}

4.약수의합

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수

class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i = 1; i <= n; i++){
            if (n % i == 0){
                answer += i;
            }
        }
        return answer;
    }
}

5.문자열 내 p와 y의 개수

대문자와 소문자가 섞여있는 문자열 s가 주어진다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 true, 다르면 false를 반환하는 함수를 완성해라. 'p','y' 모두 없는경우 항상 true를 반환한다 단,개수를 비교할때 대문자와 소문자는 구별하지 않는다.
문자열을 Char형 배열로 바꾸고 for문을돌린후 if문으로 답을 반환했다
좀더 효율적인 방법이 있지 않았을까?

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        char[] ss = s.toCharArray();
        int p = 0;
        int y = 0;
        for (int i = 0; i < ss.length; i++){
            if (ss[i] == 'p' || ss[i] == 'P'){
                p++;
            } else if (ss[i] == 'y' || ss[i] == 'Y'){
                y++;
            }
        }
        if (p == y){
            answer = true;
        } else if (p > y){
            answer = false;
        } else if (p < y){
            answer = false;
        }
        return answer;
    }
}

6.같은 숫자는 싫어

배열 arr가 주어진다 배열 arr의 각 원소는 0부터 9까지 이루어져 있다.
이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 한다.
단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야한다.
최대한 ArrayList를 안쓰고 Array만쓰면서 for if로 해결하려했는데 도저히 답이 안나와서 그냥 ArrayList썻다..

import java.util.*;
public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};
        ArrayList<Integer> arrlist = new ArrayList<>();
        int num = 10;
        for (int i = 0; i < arr.length; i++){
            if(arr[i] != num){
                arrlist.add(arr[i]);
                num = arr[i];
            }
        }
        answer = new int[arrlist.size()];
        for (int i = 0; i < answer.length; i++){
            answer[i] = arrlist.get(i);
        }
        return answer;
    }
}

7. 가운데 글자 가져오기

단어 s의 가운데 글자를 반환하는 함수를 만들어보자. 단어의 길이가 짝수라면 가운데 두글자를 반환한다.

class Solution {
    public String solution(String s) {
        String answer = "";
        char[] dummy = s.toCharArray();
        int half = dummy.length / 2;
        if (dummy.length % 2 == 0){
            answer = String.format("%c%c", dummy[half-1], dummy[half]);
        } else {
            answer = String.format("%c",dummy[half]);
        }
        return answer;
    }
}

8. x만큼 간격이 있는 n개의 숫자

정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야한다. 다음 제한 조건을 보고, 조건을 만족하는 함수를 완성하라.
제한조건
x는 -10000000 이상, 10000000 이하인 정수입니다.
n은 1000 이하인 자연수입니다.

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = {};
        answer = new long[n];
        long temp = x;
        for (int i = 0; i < n; i++){
            answer[i] = temp;
            temp += x;
        } 
        return answer;
    }
}

좋은 웹페이지 즐겨찾기