전체 글

Let's Enjoy Free Time (LEFT)
Algorithms/백준

[백준] '통계학' - Java

수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자. 산술평균 : N개의 수들의 합을 N으로 나눈 값 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값 최빈값 : N개의 수들 중 가장 많이 나타나는 값 범위 : N개의 수들 중 최댓값과 최솟값의 차이 N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오. 요구하는 산술평균, 중앙값, 최빈값, 범위를 구하는 문제이다. 나머지는 간단한 연산으로 구할 수 있다고 해도 최빈값을 구하는 부분에서 생각이 많아졌다. Try 1) BufferedReader br = new BufferedReader(new Inp..

Algorithms/백준

[백준] '수 정렬하기3' - Java

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. >> 주의사항 : 시간 제한 이번 문제는 시간제한(=시간복잡도 고려)도 있지만, 수의 범위가 매우 크기때문에 배열의 크기를 10001크기로 선언한다. boolean배열로 선언하게 되면 중복으로 입력되는 데이터를 처리하기 힘들어진다. (인덱스로 접근하기 때문) Answer 1) int[] arr = new int[10001]; // 자연수를 입력받고, 0도 제외된 데이터이므로 1부터 시작 for(int i = 1; i < arr.length; i++) { // arr에 입력된 데이터가 있는 경우에만, 그 값을 StringBuilder에 누적 // StringBuilder에 누적시키면, 그만큼 arr은 카운트를 감소시킴 while(..

Algorithms/백준

[백준] '색종이' - Java

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오. 검은 영역의 넓이를 구하는 것이므로 겹치는 부분은 차감해주어야한다. Try 1) // 색종이의 수 int N = Integer.parseInt(br.readLine()); int[][] arr = new int[N][2]; // INPUT : 2차원배열과 각 좌표 for(int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine());..

Algorithms/백준

[백준] '최댓값' - Java

9×9 격자판에 쓰여진 81개의 자연수 또는 0이 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 행 몇 열에 위치한 수인지 구하는 프로그램을 작성하시오. 모든 인덱스를 돌며 max값을 찾아내야한다. 1열부터 찾아야하므로 x와 y 변수에 i + 1, j + 1을 각각 해준다. Answer 1) for(int i = 0; i = max) { max = arr[i][j]; // 1열부터 시작된다고 고지되어있으므로 +1을 해줌 x = i + 1; y = j + 1; } } } if(arr[i][j] >= max) 조건문으로 max값을 쉽게 찾아낼 수 있었다. import ..

Algorithms/백준

[백준] '행렬 덧셈' - Java

N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오. N * M 크기의 행렬 두개가 주어지고 행렬의 덧셈을 수행해야한다. 각 인덱스에 맞게 더한 후 반환해야했다. Answer 1) for(int i = 0; i = N) { for(int j = 0; j < M; j++) { B[k][j] = Integer.parseInt(st.nextToken()); } k++; } // 2차원배열 A에 입력받기 else { for(int j = 0; j < M; j++) { A[i][j] = Integer.pa..

Algorithms/백준

[백준] '나이순 정렬' - Java

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. >> 나이가 같으면 가입한 순(입력한 순)으로 출력 이또한 사전과 같은 프로그램을 만드는 문제였다. 1181번_단어정렬 문제와 유사하다. Try 1) BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); HashMap dic = new HashMap(); int N = Integer.parseInt(br.readLine()); String[] input2 = new String[N]; int max = 0; for(int i = 0;..

Algorithms/백준

[백준] '단어 정렬' - Java

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 단, 중복된 단어는 하나만 남기고 제거해야 한다. 사전 프로그램을 만드는 문제이다. 대신 조건이 두가지있는데, 마냥 내림차순, 오름차순 정렬을 하는 것이 아닌 1. 길이가 짧은 것부터 우선순위 2. 그 후 길이가 같으면 사전순으로 조건을 어떻게 맞춰야할지 막막하기도 했다. Try 1) HashSet remove = new HashSet(); List input = new ArrayList(); // 1. 중복제거를 위해 HashSet에 값을 대입 for(int i = 0; i < N; i++) { remove.add(br.readLine()); } // ..

Algorithms/백준

[백준] '소트인사이드' - Java

배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자. 문제에서도 말했듯 배열을 정렬하는 것은 Arrays.sort() 메서드 사용이나, 변수사용으로 for문을 통해 정렬하는 방법 등 쉬울 수 있지만, 숫자가 주어지면 그 숫자를 각 토큰으로 판단하여 내림차순 정렬한 값을 반환해야한다. Answer 1) for(int i = 0; i < N.length(); i++) { sort[i] = N.charAt(i) - '0'; } Integer[] temp = Arrays.stream(sort).boxed().toArray(Integer[]::new); Arrays.sort(temp, Collections.reverseOrder()); String answer = ""; fo..

Algorithms/프로그래머스

[프로그래머스] '문자열 밀기' - Java

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요. 문자열 밀기라고 한다면, 배열에서나 리스트 등의 자료구조에서 특정 메서드를 통해 쉽게 해결할 수 있지만, 이 문제에서는 String만 주어졌을때 해결할 방법을 찾는 것이다. Solution 1) 다만 두 문자열이 주어지고, A를 기준으로 B문자열은 얼마나 이동했는지 (오른쪽으로만 밀게됨) 를 판단한다. for(int i = 0; i < A.lengt..

LEFT
LEFT ON