TIL/2023

[0622] TIL

개발 공주 2023. 6. 23. 11:35
728x90

오늘 한 것

  • 자바의 정석
    • chapter 2 (변수) 연습문제 풀기
    • chapter 3 (연산자) 연습문제 풀기
    • chapter 4 (조건문 반복문) 연습문제 풀기
    • chapter 5 (배열) 연습문제 풀기
    • chapter 6 (객체지향 프로그래밍 1) 공부
    • chapter 7 (객체지향 프로그래밍 2) 공부
    • chapter 6 (객체지향 프로그래밍 1) 연습문제 풀기

  • 알고리즘 (항해 99 시험)

첫 번째 문제 

자연수 n의 각자리를 뒤집은 순서로 더하고 출력하는 거

import java.util.Arrays;

public class Main {
    //자연수 n의 각 자리 숫자를 뒤집은 순서로 더해 출력하는 수식을 리턴해주세요. 예를들어 n이 12345이면 "5+4+3+2+1=15" 라는 문자열을 리턴합니다.
    //입력값 예제
    //718253	"3+5+2+8+1+7=26"
    public String solution(int n) {
        String answer = "";
        int sum = 0;

        char[] charArray = Integer.toString(n).toCharArray();

        for (int i = charArray.length - 1; i>=0; i--) {

            sum += Integer.parseInt(String.valueOf(charArray[i]));

            if (i == 0) {
                answer += charArray[i] + "=" + sum;
            }else {
                answer += charArray[i] + "+";
            }
        }
        return answer;
    }
    public static void main(String[] args) {
        Main method = new Main();

        System.out.println(method.solution(718253));
    }
}

두 번째 문제

public class Main2 {
    //첫째 줄에 정수 n이 주어진다. **(0≤n≤100)**
    //
    //n줄 만큼 ‘*’로 이루어진 삼각형을 출력한다.
    //
    //최상단의 별은 1개이며, 모든 줄의 별의 갯수는 홀수이다.
    public void solution2(int star) {
        for(int i=0;i<star;i++){    // 스타만큼 배열 반복
            for(int j=0;j<star-i;j++){ // 공백은 star기준 -1씩 출력
                System.out.print(" "); // 별 왼쪽에 공백
            }
            for(int j=0;j<2*i+1;j++){  //별(*) 1개 시작으로 2개씩 증가..홀수이기떄문에
                System.out.print("*");
            }
            System.out.println(""); // 별을 찍어주고 줄 바꿈용도
        }
    }
    
    public static void main(String[] args) {
        Main2 method = new Main2();
        int star = 9;
        method.solution2(star);
    }
}

세 번째 문제

사방탐색문제... 그냥 전에 한번 스윽 지나친 기억이 있어서 사방탐색이 알고 있는 거만 조금 알았다. 무사히 잘 푼 듯

public class Main3 {
    public void solution(int[][] arr1) {
        //**5x5 2차원 배열이 주어질 때** 어떤 원소가 상하좌우에 있는 **원소보다 클 때 해당 위치에 * 을 표시**하는 프로그램을 작성하세요. 경계선에 있는 수는 **상하좌우 중 존재하는 원소만을 비교**합니다.
        //
        //조건 1: 결과는 하나의 문자열이며, 2차원 배열의 각 배열의 요소들에 해당하는 문자는 길이 1의 공백으로 구분된다.
        //
        //조건2: 결과에서 배열간의 구분은 줄바꿈(개행문자)으로 한다.
        //
        //조건3: 비교할 원소가 존재하지 않는 경우 0으로 간주한다

        //[[7,4,6,5,9],
        // [6,1,3,4,5],
        // [4,8,5,6,9],
        // [1,3,0,6,4],
        // [6,4,8,1,7]
        // ]

        //* 4 * 5 *
        //6 1 3 4 5
        //4 * 5 6 *
        //1 3 0 6 4
        //* 4 * 1 *
        String[][] check = new String[5][5];

        int[] dr = {-1, 1, 0, 0};   // x좌표
        int[] dc = {0, 0, -1, 1};   // y좌표

        int r = arr1.length;
        int c = arr1[0].length;

        for(int i = 0; i < r; i++) {
            for(int j = 0; j < c; j++) {
                // 사방 탐색 DFS(깊이 우선 탐색)
                for(int w = 0; w < 4; w++) { // 동서남북 탐색
                    // 4번 돌면서 ii, jj에 사방향을 지정
                    int ii = i + dr[w];
                    int jj = j + dc[w];
                    // 배열 인덱스가 마이너스가 되거나 행열을 초과하는 현상을 방지
                    if(ii < 0 || ii == r || jj < 0 || jj == c) {
                        continue;
                    }
                    if (arr1[i][j] <= arr1[ii][jj]) {
                        check[i][j] = String.valueOf(arr1[i][j]);
                    }
                }
                if(check[i][j] != null){
                    System.out.print(check[i][j]);
                }else {
                    System.out.print("*");
                }
            }
            System.out.println();
        }

    }


    public static void main(String[] args) {
        Main3 method = new Main3();
        int[][] arr1 = {
                {7,4,6,5,9}                ,
                {6,1,3,4,5},
                {4,8,5,6,9},
                {1,3,0,6,4},
                {6,4,8,1,7}
        };
        System.currentTimeMillis();
        method.solution(arr1);
    }
}

마무리

오늘은 항해 99 시험이 있었다. 목요일마다 시험을 본다. 좀 쫄렸지만 그래도 무사히 잘 마친 거 같다. 처음 두 문제는 연습을 많이 해서 금방 풀었지만 3번째 문제는 처음에는 어찌하지 하면서 덜덜 떨고 있었지만 전에 미로탐색 예제를 본 게 기억이 나고 해서 사방탐색 알고리즘을 찾아서 잘 풀었다. 우선 손으로 그림부터 그리면서 차근차근 풀었더니 잘 해결한 듯

x좌표, y좌표가 무척 헷갈려서 힘들었다. 우리가 기존에 생각하는 x, y랑은 완전다르다 코딩에서는 배열을 사용하기 때문에 다음에 또 문제를 풀면 주의하자.

'TIL > 2023' 카테고리의 다른 글

[0624] TIL  (0) 2023.06.25
[0623] TIL  (0) 2023.06.24
[0621] TIL  (0) 2023.06.22
[0620] TIL  (0) 2023.06.21
[WIL] 항해 1주차  (0) 2023.06.18