티스토리 뷰

개발/TIL

9.29 알고리즘

욱스다 2022. 9. 29. 23:26

1.계획

항해 알고리즘 테스트 13:00~17:00

남는 시간은 자바 개념 복습.

 

2.배운점

알고리즘 모의고사 1번문제

0~9의 일부의 수가 담긴 배열로 전달되고 그 배열중에 0~9수 중에 없는 수를 다 더해서 반환하기

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class programingR1 {
    public int wordTrans(int[] numbers){
        // 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다.
        // numbers에서 찾을 수 없는 숫자는 두개입니다. 두 정수를 a,b라고 했을 때,
        // a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수,
        // solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
        int answer = 0;
        int min = 0;
        int max = 0;
        List<Integer> list = new ArrayList<Integer>();
        for(int i=0;i<10;i++){
            if(!contains(numbers,i)){
                list.add(i);
            }
        }
        min = Math.min(list.get(0),list.get(1));
        max = Math.max(list.get(0),list.get(1));

        for (int i=min; i<= max; i++) {
            answer += i;
        }
        return answer;
    }
    public boolean contains(int[] arr, int key) {
        return Arrays.stream(arr).anyMatch(i -> i == key);
    }

    public static void main(String[] args) {
        programingR1 s = new programingR1();
        // Test programingR1클래스의 인스턴스 생성 후 s에 할당
        int[] arr1 = {1,2,4,6,7,8,9,0}; // 8      3,5 없음 3+4+5
        int[] arr2 = {7,8,3,5,6,1,2,4}; // 9      9,0 없음 1+2+3+4+5+6+7+8+9= 45
        System.out.println(s.wordTrans(arr2));
    }
}

문제를 푼 방식은 contains라는 boolean 타입의 매개 변수를 arr라는 배열과 key를 전달받을 수 있는 메소드를 정의해서

배열이 가지고있지 않은 수를 ArrayList배열인 list에 추가해주어 Math.min과 Math.max를 통해 인자 값을 비교해서

for문을 통해 최소,최대값을 포함한 사이의 값을 더해서 answer에 담아 반환해주는 형식으로 풀었습니다.

 

2번 문제

스트링 타입의 s를 전달받아 이 변수를 홀수번째 알파벳은 소문자 짝수번째는 대문자로 처리하여 반환하는 문제

class SolutionR2 {
    public String wordTrans(String s) {
        // 문자열 s는 한 개 이상의 단어로 구성되어 있습니다.
        // 각 단어는 하나 이상의 공백문자로 구분되어 있습니다.
        // 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

        String answer = "";
        String es = "\"";
        String[] str = s.split("");
        int index=0;

        for(int i=0; i<str.length; i++){
            // 공백 문자열이 들어오면 공백을 추가해주고 인덱스 초기화 작업
            if(str[i].equals(" ")){
                str[i]=" ";
                index=0;
            }else{
                // 짝수이면 대문자 변환 후 출력,
                if(index%2==0) {
                    str[i]=str[i].toUpperCase();
                    index++;
                }
                // 홀수이면 소문자로 변환 후 출력
                else if(index%2 != 0){
                    str[i]=str[i].toLowerCase();
                    index++;
                }
            }
            answer += str[i];
        }
        return es+answer+es;
    }
}

public class programingR2 {
    public static void main(String[] args) {
        SolutionR2 s = new SolutionR2();
        String a = "try hello world";
        String b = "lee chang wook";

        System.out.println(s.wordTrans(b));
    }
}

문제를 푼 방식은 매개변수로 받은 스트링 s를 split메소드를 통해 공백을 포함해서 스트링 배열에 담아서

포문을 돌려 공백들오면 index=0 으로 초기화한 값을 넣어줌과 동시에 홀수를 판별할 수 있는 로직을 작성해주고 그 로직마다 실행이되면 마지막에 index를 1씩추가 하여 홀수를 판별할 수 있게 조건식에 넣었습니다. 그리고 그 변환한 값을 answer에 추가해주어 반환해주었습니다.

모의고사는 여기까지

 

3.코멘트

알고리즘을 짜는거 자체도 생각했을때 쉬운일이 아니라는 생각이드는데 

그걸 누군가에게 보여주려고 혹은 과제로 영상을 찍어서 풀이를 설명 한다는게 참 쉽지않다는 생각이 드는 하루였다.

설명하면서 더 명확하게 내가 어느 부분때문에 사용해서 그 결과값이 이렇게 나왔다를 표현하면서 좀 더 프로그래밍을 이해하는 과정이지 않을까 싶기도하지만 어렵다! 내일부터는 스프링 주차가 시작된다.

객체를 객체답게 쓰는것을 도와주는 프레임워크라니.. 말 자체로는 멋진 말인거같은데 

학습해서 적용한다고 치면 쉽지는 않을거같으나 다시 목표를 향해 나아가야겠다.

오늘은 20000!

'개발 > TIL' 카테고리의 다른 글

10.4 HTTP, JPA  (0) 2022.10.04
9.30 Spring Container, DI  (0) 2022.10.01
9.28 클래스  (0) 2022.09.28
9.27 혼공자  (0) 2022.09.27
9.24  (1) 2022.09.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함