//////
Search
🗒️

황민우

날짜
2022/10/12
작성자
황민우
카테고리
회고

목차

알고리즘

최대값 최소값

코드

최대값 구하기
public class MaxNum { int getMax(int[] arr) { int maxNum = arr[0]; // 배열의 첫 번째 값으로 초기화함. for (int i = 1; i < arr.length; i++) { // 이미 첫 번째 값으로 초기화했기때문에 1번 인덱스부터 시작. if (maxNum < arr[i]) { // 저장한 maxNum보다 큰 값이 있으면 maxNum = arr[i]; // 그 값을 maxNum에 덮어씌움. } } return maxNum; } public static void main(String[] args) { int[] arr = {-3, -29, -38, -12, -57, -74, -40, -85, -61}; MaxNum m = new MaxNum(); System.out.println(m.getMax(arr) == -3); } }
Java
복사
최대값 구하기
public class MinNum { int getMin(int[] arr) { int minNum = arr[0]; for (int i = 1; i < arr.length; i++) { if (minNum > arr[i]) { // 비교 조건만 바꿔주면 된다. minNum = arr[i]; } } return minNum; } public static void main(String[] args) { int[] arr = {-3, -29, -38, -12, -57, -74, -40, -85, -61}; MinNum m = new MinNum(); System.out.println(m.getMin(arr) == -85); } }
Java
복사
리팩토링
최대값을 구하는 로직과 최소값을 구하는 로직 사이의 차이는 비교 조건 차이뿐이다.
두 정수 비교를 추상화하여 구현해보자.
IsCompare
public interface IsCompare { boolean isCompare(int a, int b); }
Java
복사
MaxCompare
public class MaxCompare implements IsCompare{ @Override public boolean isCompare(int a, int b) { return a < b; } }
Java
복사
MinCompare
public class MinCompare implements IsCompare{ @Override public boolean isCompare(int a, int b) { return a > b; } }
Java
복사
MaxMinContext
public class MaxMinContext { private int getNum(int[] arr, IsCompare isCompare) { int num = arr[0]; for (int i = 1; i < arr.length; i++) { if (isCompare.isCompare(num, arr[i])) { num = arr[i]; } } return num; } public int getMax(int[] arr) { return getNum(arr, new MaxCompare()); } public int getMin(int[] arr) { return getNum(arr, new MinCompare()); } }
Java
복사
Main
public class Main { public static void main(String[] args) { int[] arr = {-3, -29, -38, -12, -57, -74, -40, -85, -61}; MaxMinContext context = new MaxMinContext(); int maxNum = context.getMax(arr); int minNum = context.getMin(arr); System.out.println(maxNum); System.out.println(minNum); } }
Java
복사

2차 배열 최대값

코드업 4596번 문제
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int maxNum = -1; int row = -1; int col = -1; for (int i = 0; i < 9; i++) { String strNum[] = sc.nextLine().split(" "); for (int j = 0; j < 9; j++) { int inputNum = Integer.parseInt(strNum[j]); if (maxNum < inputNum) { maxNum = inputNum; row = i; col = j; } } } System.out.println(maxNum); System.out.printf("%d %d\n", ++row, ++col); } }
Java
복사

시간복잡도

O(N)
O(1)
O(logN)
O(N^2)

DB

데이터 분석

요구사항 분석

1.
병원분류명이 총 몇가지 인지?
2.
병원분류별로 몇개씩 있는지? ex) 의원:x개 치과병원:y개 한방병원:z개 …
3.
병원 분류가 몇가지 인지?
4.
서울의 구별로 각 병원이 몇개 있는지 ex) 서울시 금천구 의원, 한방병원, 치과병원, .. 이 각 몇개인지?
5.
구별로 병원이 가장 많은 구는?
6.
이비인후과(0), 외과(1), 내과(2), 소아과(3), 피부과, 성형외과 는 각 몇개인지(category)

개념적 설계

논리적 설계

컬럼명
설명
Type
ex
id(PK)
VARCHAR(8)
A1120837
address
전체 주소
VARCHAR(90)
~~
district
서울특별시 xx구
VARCHAR(15)
서울특별시 강남구
category
VARCHAR(1)
A: 종합병원 B: 병원 C: 의원 D: 요양병원 E: 한방병원 G: 한의원 I: 기타 M: 치과병원 N: 치과의원 R: 보건소
emergency_room
응급실운영여부 1 운영 2 운영안함
INT
1 또는 2
name
해당 병원의 이름
VARCHAR(40)
가로수치과의원
subdivision
세부 분과 피부과, 성형외과, 외과, 내과, 소아과, 가정의학과, 치과, 한의원 등
VARCHAR(10)
피부과 성형외과

물리적 설계

CREATE TABLE `hospital`.`seoul` ( `id` VARCHAR(8) NOT NULL, `address` VARCHAR(90) NOT NULL COMMENT '전체 주소', `district` VARCHAR(15) NOT NULL COMMENT '서울시 00구', `category` VARCHAR(1) NOT NULL COMMENT '병원분류\nC의원\nE한방병원\nN치과의원\n...나중에 추가 작성\n', `emergency_room` INT NOT NULL COMMENT '응급실운영여부\n1 운영\n2 운영안함\n', `name` VARCHAR(40) NOT NULL COMMENT '해당 병원의 이름', `subdivision` VARCHAR(10) NULL COMMENT '세부 분과\n피부과, 성형외과, 외과, 내과, 소아과, 가정의학과, 치과, 등\n', PRIMARY KEY (`id`));
SQL
복사

데이터 가공

소스 코드

레코드