23-06-09 TIL

more·2023년 6월 9일
0

문제

  1. 팀 프로젝트
    -> 메뉴를 고르다가 취소를 했을 경우, 다시 메뉴 목록을 보여주고 싶음.
    -> 메뉴 목록 자체를 그냥 메인 메서드에다가 구현하여서 다시 호출하기가 어렵다.

시도

  1. 팀프로젝트
    1-1. 일단은 메인 메서드에서 출력했던 메뉴 항목들을 메서드로 바꿔줌.
    -> 해결
    1-2. 다른 것들 (아이템, 주문 목록) 등도 보여주고 싶은데 전부 메인 메서드에다가 구현을 해두었음
    -> 이 부분은 또 따로 메서드를 구현하기는 하였으나 매개변수로 너무 많은 것들을 넘겨주어야했다.
    -> 매개변수를 줄이고 싶음.

해결

  1. 팀 프로젝트
    -> 매개변수를 줄이기 위해서는 객체와 클래스를 얼마나 잘 이해하고 사용하는지가 중요
    -> 아래와 같이 해당하는 객체를 static으로 선언해두고 사용한다면 매개변수를 여러개 넘겨줄 필요 없음. (사용 방법과 때에 따라 다르니 주의 요망)

    private static MenuContext menuContext;
    
    public static void main(String[] args) {
    	menuContext = new MenuContext();
    	displayMainMenu();
    }

알게 된 점

  1. 팀 프로젝트
    1-1. 메인 메서드의 길이를 줄이고 여러 기능들을 메서드를 만들어서 구현하는 것이 좋다.
    -> 다시 그 기능을 사용하거나 출력할 경우 (메뉴 취소 누르고 다시 메뉴 목록을 누르거나...) 그냥 해당 메서드를 재귀 호출하면 되어서 편하다.

오늘 푼 문제

백준 15954 (인형들) - Java
  • 좀 어려워 보이기는 했는데 그냥 해보면 답이 나온다.
  • 표준 편차의 최소값을 구해서 출력해야하는 것
  • 5 3이라고 입력된다고 해서 3개만 하는 것이 아니라 3, 4, 5, 즉, 3이상 5이하의 갯수의 표준편차를 구하는 것에 주의
import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        ArrayList<Integer> arr = new ArrayList<>();
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            arr.add(Integer.parseInt(st.nextToken()));
        }

        double ans = Double.MAX_VALUE;
        double res = 0;

        for (int i = K; i <= N; i++) {
            for (int j = 0; j <= N - i; j++) {
                double m = min(arr, j, i);
                res = answer(arr, m, j, i);
                ans = Math.min(ans, res);
            }
        }

        bw.write(String.format("%.11f", ans)+ "\n");
        bw.flush();
        bw.close();
        br.close();
    }
      public static double min(ArrayList<Integer> arr, int start, int K) {
          double avg = 0.0;
          for (int i = 0; i < K; i++) {
              avg += arr.get(start + i);
          }
          return avg / K;
      }
      public static double answer(ArrayList<Integer> arr, double m, int start, int K) {
          double res = 0.0;
          for (int i = 0; i < K; i++) {
              res += Math.pow(arr.get(start + i) - m, 2);
          }
          return Math.sqrt(res / K);
      }
	}

0개의 댓글