//////
Search
🍒

[1012] Max-Min 알고리즘, mysql INSERT문, *.sql 파일 실행, java ReadLine OPP구현

생성일
2022/11/10 07:58
태그
TodayILearn
java
생성일 1

1. 알고리즘

입력은 2차원 배열
2차원 배열은 요소는 1행 1열부터 시작
입력되는 값은 모두 자연수

i) Max 알고리즘

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 0: value, 1: row, 2: column int[] maxArray = new int[3]; for(int i=0 ; i<9 ; i++){ int[] row = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); for(int j=0; j<row.length ; j++) { if(row[j] > maxArray[0]){ maxArray[0] = row[j]; maxArray[1] = i + 1; maxArray[2] = j + 1; } } } System.out.println(maxArray[0]); System.out.println(maxArray[1] + " " + maxArray[2]); } }
Java
복사
public class 최대값구하기2 {

ii) Min 알고리즘

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 0: value, 1: row, 2: column int[] minArray = new int[3]; for(int i=0 ; i<9 ; i++){ int[] row = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); for(int j=0; j<row.length ; j++) { if(row[j] < maxArray[0]){ minArray[0] = row[j]; minArray[1] = i + 1; minArray[2] = j + 1; } } } System.out.println(minArray[0]); System.out.println(minArray[1] + " " + minArray[2]); } }
Java
복사

알고리즘 문제 2

최대값 알고리즘
모든 행과 열을 탐색하기 위해 이중 반복문을 활용할 수 있다.
행을 BufferedReader readLine() 메소드로 입력받으면 각 숫자를 max와 비교하며 max 값을 찾는다. 그때 i와 j를 행과 열로 저장한다.
행과 열 모두 1부터 시작하기에 0부터 인덱스와 차이가 있다. 따라서 마지막에 1을 더해준다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class No4596Max { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int max = 0; int row = 0; int column = 0; for (int i = 0; i < 9; i++) { int[] rowInt = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); for (int j = 0; j < rowInt.length; j++) { if (max < rowInt[j]) { max = rowInt[j]; row = i; column = j; } } } System.out.println(max); System.out.printf("%d %d", row + 1, column + 1); } }
Java
복사

LineReader.java 파일 다형성으로 구현하기

정상희
다형성 적용 이전, 읽어온 string을 그대로 저장한 LineReader
// 첫번째 filereader : 파일 내용을 string으로 한 줄씩 읽어옴 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class LineReader { List<String> readLine(String filename) throws IOException { List<String> result = new ArrayList<>(); BufferedReader br = new BufferedReader(new FileReader(filename)); String str; while((str= br.readLine())!= null){ // filename을 한 줄씩 읽어옵니다 result.add(str); } return result; } public static void main(String[] args) throws IOException { LineReader lr = new LineReader(); String targetFile = "C:\\Users\\wjdtk\\Downloads\\서울시 병의원 위치 정보.csv"; List<String> line = lr.readLine(targetFile); //한 줄씩 읽어서 line에 저장 System.out.println(line.size()); } }
Java
복사
설계도
file 위치
OPP 구현 순서
다형성의 이해

i) Parser 인터페이스

public interface Parser<T> { // parsing할 파일의 자료형에 따라 Object를 다양하게 받기 위해 제네릭 <T> T parse(String str); }
Java
복사

ii) interface 구현체 HospitalParser 생성

import Parser.Parser; import domain.Hospital; public class HospitalParser implements Parser<Hospital> { // Interface Parser의 구현체 private String getSubdivision(String name) { String[] subDibisions = {"소아과", "피부과", "성형외과", "정형외과", "산부인과", "관절", "안과", "가정의학과", "비뇨기과", "치과", "내과", "외과", "한의원"}; for(String subDivision : subDibisions){ if(name.contains(subDivision)) { return subDivision; } } return ""; } public Hospital parse(String str) { str= str.replaceAll("\"", ""); String[] splitted = str.split(","); String name = splitted[10]; String subDivision = getSubdivision(name); return new Hospital(splitted[0],splitted[1],splitted[2],splitted[6],name, subDivision); } }
Java
복사

iii) Hospital 클래스

package domain; public class Hospital { private String id; private String address; private String category; private String district; private String name; private Integer emergency_room; // emergencyroom은 숫자라서 Integer입니다 private String subDivision; public Hospital(String id, String address, String category, String emergency_room, String name, String subDivision) { this.id = id; this.address = address; this.name = name; this.emergency_room = Integer.parseInt(emergency_room); this.subDivision = subDivision; setDistrict(address); } public void setDistrict(String str) { String[] splitted = str.split(" "); this.district = splitted[0]+" "+splitted[1]; // 서울시 어쩌구~어쩌구 ~ -> "서울시 00구"로 파싱 } public String getId() { return id; } public String getAddress() { return address; } public String getCategory() { return category; } public String getDistrict() { return district; } public String getName() { return name; } public Integer getEmergency_room() { return emergency_room; } public String getSubDivision() { return subDivision; } }
Java
복사

iv) LineReader 클래스 수정

parser을 LineReader생성자에서 초기화
import Parser.Parser; // import Parser import domain.Hospital; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class LineReader<T> { Parser<T> parser; private boolean isRemoveColumName = true; public LineReader(Parser<T> parser, boolean isRemoveColumName) { this.parser = parser; this.isRemoveColumName = isRemoveColumName; } List<T> readLine(String filename) throws IOException { List<T> result = new ArrayList<>(); BufferedReader br = new BufferedReader(new FileReader(filename)); String str; if(isRemoveColumName){ br.readLine(); } while((str= br.readLine())!= null){ // parse()가 호출되어 실행되면, return할 때 hospital 객체를 생성하고 종료합니다. // 19xxxx 개의 hospital을 저장하기 위해 main에서 List를 작성할 것이다. result.add(parser.parse(str)); } return result; } }
Java
복사

v) Main 클래스

import domain.Hospital; import java.io.IOException; import java.util.List; public class Main { public static void main(String[] args) throws IOException { String targetFile = "C:\\Users\\wjdtk\\Downloads\\서울시 병의원 위치 정보.csv"; LineReader<Hospital> hospitalLineReader = new LineReader<Hospital>(new HospitalParser(), true); List<Hospital> hospitals = hospitalLineReader.readLine(targetFile); for(Hospital hospital : hospitals){ System.out.printf("%s,%s,%s,%s,%d,%s,%s\n", hospital.getId(),hospital.getAddress(),hospital.getDistrict(),hospital.getCategory(), hospital.getEmergency_room(),hospital.getName(), hospital.getSubDivision()); } } }
Java
복사