반응형

문제 설명

길이가 n이고, 수박수박수박수....와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 수박수박을 리턴하고 3이라면 수박수를 리턴하면 됩니다.

 

제한 조건

  • n은 길이 10,000이하인 자연수입니다.

입출력 예

n return
3 "수박수"
4 "수박수박"

 


나의 코드

class Solution {
  public String solution(int n) {
      String answer = "";
      
      for(int i = 1; i <= n; i++){
          if(i%2 != 0)
              answer += "수";
          else
              answer += "박";
      }
      return answer;
  }
}

 

다른 사람 코드

class Solution {
  public String solution(int n) {
      return new String(new char [n/2+1]).replace("\0", "수박").substring(0,n);
  }
}

미쳤따리..

반응형

'Algorithm Study > Programmers' 카테고리의 다른 글

자연수 뒤집어 배열로 만들기/java  (0) 2019.08.28
약수의 합 / java  (0) 2019.08.28
두 정수 사이의 합 / java  (0) 2019.08.28
2016년/java  (0) 2019.08.28
가장 큰 수 / java / 정렬  (0) 2019.08.17
반응형

문제 설명

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

 

제한 조건

  • a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
  • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
  • a와 b의 대소관계는 정해져있지 않습니다.

입출력 예

a b return
3 5 12
3 3 3
5 3 12

 


나의 코드

class Solution {
  public long solution(int a, int b) {
      long answer = 0;
      
      if(a<b){
          for(int i = a; i <= b; i++){
              answer += i;
          }
      }else
          for(int i = b; i <= a; i ++){
              answer += i;
          }
      return answer;
  }
}

 

다른 사람 코드

class Solution {

    public long solution(int a, int b) {
        return sumAtoB(Math.min(a, b), Math.max(b, a));
    }

    private long sumAtoB(long a, long b) {
        return (b - a + 1) * (a + b) / 2;
    }
}

 

반응형

'Algorithm Study > Programmers' 카테고리의 다른 글

약수의 합 / java  (0) 2019.08.28
수박수박수박수박수박수?/java  (0) 2019.08.28
2016년/java  (0) 2019.08.28
가장 큰 수 / java / 정렬  (0) 2019.08.17
k번째수/java/정렬(출제 빈도 높음)  (0) 2019.08.16
반응형

문제 설명

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT

입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 TUE를 반환하세요.

 

제한 조건

  • 2016년은 윤년입니다.
  • 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

입출력 예

a b result
5 24 "TUE"

 


나의 코드

class Solution {
  public String solution(int a, int b) {
		String answer = "";
		int totalDay = 0; 
		int dayOfMonth = 0;
      
      //현재 월 이전까지의 총 일 수를 구함
		for(int i=1; i<a; i++) { 
			if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8  || i == 10 || i == 12) dayOfMonth = 31;
			else if(i == 2) dayOfMonth = 29;
			else dayOfMonth = 30;
			
			totalDay += dayOfMonth; 
		}
      //현재 월의 일수를 더함
		totalDay += b;
		
        //1월1일은 금요일 / 7로 나눈 나머지가 1인 경우 금요일
		switch(totalDay % 7) {
		case 0:
			answer = "THU";
			break;
		case 1:
			answer = "FRI";
			break;
		case 2:
			answer = "SAT";
			break;
		case 3:
			answer = "SUN";
			break;
		case 4:
			answer = "MON";
			break;
		case 5:
			answer = "TUE";
			break;
		case 6:
			answer = "WED";
			break;
		
		}
		
		return answer;
	}
}

 

다른 사람 코드

라이브러리 사용하는거..신기방기..

// 문제가 개편 되었습니다. 이로 인해 함수 구성이 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
import java.util.*;

class TryHelloWorld
{
    public String getDayName(int month, int day)
    {
        Calendar cal = new Calendar.Builder().setCalendarType("iso8601")
                        .setDate(2016, month - 1, day).build();
        return cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, new Locale("ko-KR")).toUpperCase();
    }
    public static void main(String[] args)
    {
        TryHelloWorld test = new TryHelloWorld();
        int a=5, b=24;
        System.out.println(test.getDayName(a,b));
    }
}

 

반응형
반응형

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

 

제한 사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

입출력 예

 

numbers return
[6,10,2] "6210"
[3,30,34,5,9] "9534330"

 


Java Comparable, Comparator

Comparable, Comparator하면 '정렬'을 떠올려야하는 것이다.

 

우선 자바에서 객체를 정렬할 때 일정한 기준이 필요하다.

 

Comparable : 객체 간의 일반적인 정렬이 필요할 때, Comparable 인터페이스를 확장해서 정렬의 기준을 정의하는 compareTo() 메서드를 구현한다.

Comparator : 객체 간의 특정한 정렬이 필요할 때, Comparator 인터페이스를 확장해서 특정 기준을 정의하는 compare() 메서드를 구현한다.

 

공통점은 정렬의 기준을 정의한다는 것이고,

 

차이점은 정렬 기준이

-일반적이냐 일반적이지 않냐와

-compareTo(Object o) 메서드를 구현하느냐 compare(Object o1, Object o2) 메서드를 구현하느냐

 

Comparable 구현

Student Vo를 생성하여 Comparable 인터페이스를 구현하였다. Comparable 인터페이스를 구현하는 경우

public int compareTo(T) 메소드를 구현하고 내부에서 비교처리 후 int형 리턴으로 비교 결과를 리턴한다.

  • 양수리턴 : this 오브젝트가 앞에 위치
  • 음수리턴 : this 오브젝트가 뒤에 위치
  • 0리턴 : 동일한 값으로 간주하고 입력 순서 유지

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

public class Student implements Comparable<Student> {

    

    private String name;

    private int age;

    

    public Student(String name, int age) {

        this.name = name;

        this.age = age;

    }

    

 

    public String getName() {

        return name;

    }

    

    public int getAge() {

        return age;

    }

    

    /**

     * 양수가 리턴 되는 경우 현재 Object가 앞

     * 음수가 리턴 되는 경우 현재 Object가 뒤

     * 0이 리턴되는 경우 동일 값으로 간주하고 입력순서 유지

     */

    @Override

    public int compareTo(Student o) {

        int result = this.getName().compareTo(o.getName());

        if(result == 0) {

            result = this.getAge() - o.getAge();

        }

        return result;

    }

}

Colored by Color Scripter

cs

 

아래와 같이 테스트를 수행하는 경우

1

2

3

4

5

6

7

8

9

10

11

12

public static void main(String[] args) {

    Student s1 = new Student("홍길동", 27); 

    Student s2 = new Student("이지수", 31); 

    Student s3 = new Student("이지수", 30);

    Student[] arr = new Student[]{s1, s2, s3};

    

    Arrays.sort(arr);

    

    for(Student s : arr) {

        System.out.println(s.getName() + " " + s.getAge());

    }

}

Colored by Color Scripter

cs

 

이렇게 이름순으로 먼저 정렬되고, 이름이 같은 경우 나이순으로 정렬된 결과를 얻는다.

 

이지수 30
이지수 31
홍길동 27

 

Comparator 구현

Comparator는 보통 다음과 같은 상황에서 사용된다.

  1. JAVA에서 기본제공하는 Reference Type을 내가 원하는대로 정렬하고 싶을때 (예시 : String, Integer를 역순으로 정렬 혹은 특정추가 조건)
  2. 기존에 구현된 Comparable의 정렬과는 다른 결과를 얻고 싶을 때

즉 기존에 구현되어 있는 Comparable 인터페이스 구현 대신에 다른 조건에 의해서 정렬하고자 하는 경우 사용된다.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

public static void main(String[] args) {

    Student s1 = new Student("홍길동", 27); 

    Student s2 = new Student("이지수", 31); 

    Student s3 = new Student("이지수", 30);

    Student[] arr = new Student[]{s1, s2, s3};

    

    Arrays.sort(arr, new Comparator<Student>() {

        @Override

        public int compare(Student o1, Student o2) {

            return o1.getAge() - o2.getAge();

        }

    });

    

    for(Student s : arr) {

        System.out.println(s.getName() + " " + s.getAge());

    }

}

Colored by Color Scripter

cs

 

Arrays.sort() 혹은 Collections.sort()에 두번째 인자로 Comparator 구현체를 전달하여 주면 된다.

홍길동 27
이지수 30
이지수 31
출처: https://javaplant.tistory.com/15 [자바공작소]



Comparator 함수를 찾아보다가 정리해본다.. 자바는 끝이없고..

 


 

내가 짠 코드

import java.util.*;


class Solution {
    public String solution(int[] numbers) {
        String answer = ""; // 리턴값 초기화
        String[] str_numbers = new String[numbers.length]; // 파라미터 numbers 배열의 길이와 같은 string 배열을 생성
        // int 배열인 numbers를 string배열인 str_numbers로 변환
        for (int i = 0 ; i < numbers.length ; i++) {
            str_numbers[i] = String.valueOf(numbers[i]);
        }
        // str_numbers를 Compare()에 정의된 방식으로 정렬
        Arrays.sort(str_numbers, new Compare());
        // 현재 str_numbers는 올림차순으로 정렬되어 있음
        // 따라서 가장 마지막 인덱스의 값이 max값이고, 이것이 반환값의 가장 앞에 올 숫자임
        // 반환값의 맨 앞 숫자가 0이면 answer=0 
        // 반환값의 맨 앞 숫자가 0이 아니면 내림차순으로(가장 큰 수부터) answer에 담음
        if (str_numbers[str_numbers.length - 1].equals("0")) {
            answer += "0";
        } else {
            for (int i = str_numbers.length - 1; i >= 0; i--) {
                // Compare 클래스에서 올림차순 정렬을 했다면 아래 코드 사용
                // for(int i = 0 ; i < str_numbers.length ; i++)
                answer += str_numbers[i];
            }
        }
        return answer;
    }
}
// Comparator 인터페이스를 오버라이딩하여 정렬 방식을 재정의하기
class Compare implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {
        return (o1 + o2).compareTo(o2 + o1);// 올림차순 정렬
        
        // 내림차순 정렬은 아래와 같이 순서를 바꾸어주면 된다
        // return (o2 + o1).compareTo(o1 + o2);
    }
}

 

다른 사람이 짠 코드(콜렉션 함수 사용)

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";

        List<Integer> list = new ArrayList<>();
        for(int i = 0; i < numbers.length; i++) {
            list.add(numbers[i]);
        }
        Collections.sort(list, (a, b) -> {
            String as = String.valueOf(a), bs = String.valueOf(b);
            return -Integer.compare(Integer.parseInt(as + bs), Integer.parseInt(bs + as));
        });
        StringBuilder sb = new StringBuilder();
        for(Integer i : list) {
            sb.append(i);
        }
        answer = sb.toString();
        if(answer.charAt(0) == '0') {
            return "0";
        }else {
            return answer;
        }
    }
}

 

 

 

반응형

'Algorithm Study > Programmers' 카테고리의 다른 글

두 정수 사이의 합 / java  (0) 2019.08.28
2016년/java  (0) 2019.08.28
k번째수/java/정렬(출제 빈도 높음)  (0) 2019.08.16
체육복/java/탐욕법 알고리즘  (0) 2019.08.15
완주하지 못한 선수 / JAVA / Hash  (0) 2019.07.24
반응형

문제 설명

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

제한사항

  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.

입출력 예

array commands return
[1,5,2,6,3,7,4] [2,5,3],[4,4,1],[1,7,3] [5,6,3]

 

입출력 설명
[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
입출력 예 설명

[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

 

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

제한사항

  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.

내가 푼 코드

 

import java.util.Arrays;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        int[] tmp = {};
        
        for(int i = 0; i < commands.length; i++){
            tmp = Arrays.copyOfRange(array, commands[i][0]-1,  commands[i][1]);
            /*Arrays.copyOfRange(a,b,c) : arrays 에 들어있는 a[] 배열을 b부터 c까지 복사 하는 함수*/
            Arrays.sort(tmp);
            //tmp 에 옮겨진 부분에 대하여 정렬하고 k번째 숫자를 답으로 담음
            
            answer[i] = tmp[commands[i][2]-1];
            /*배열의 index가 0부터 시작하기 떄문에 -1을 해준다.*/
        }
        return answer;
    }
}

 

다른사람이 푼 코드(라이브러리 사용하지 않고 ... 대단..)

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int n = 0;
        int[] ret = new int[commands.length];

        while(n < commands.length){
            int m = commands[n][1] - commands[n][0] + 1;

            if(m == 1){
                ret[n] = array[commands[n++][0]-1];
                continue;
            }

            int[] a = new int[m];
            int j = 0;
            for(int i = commands[n][0]-1; i < commands[n][1]; i++)
                a[j++] = array[i];

            sort(a, 0, m-1);

            ret[n] = a[commands[n++][2]-1];
        }

        return ret;
    }

    void sort(int[] a, int left, int right){
        int pl = left;
        int pr = right;
        int x = a[(pl+pr)/2];

        do{
            while(a[pl] < x) pl++;
            while(a[pr] > x) pr--;
            if(pl <= pr){
                int temp = a[pl];
                a[pl] = a[pr];
                a[pr] = temp;
                pl++;
                pr--;
            }
        }while(pl <= pr);

        if(left < pr) sort(a, left, pr);
        if(right > pl) sort(a, pl, right);
    }
}
반응형

'Algorithm Study > Programmers' 카테고리의 다른 글

두 정수 사이의 합 / java  (0) 2019.08.28
2016년/java  (0) 2019.08.28
가장 큰 수 / java / 정렬  (0) 2019.08.17
체육복/java/탐욕법 알고리즘  (0) 2019.08.15
완주하지 못한 선수 / JAVA / Hash  (0) 2019.07.24
반응형

문제 설명

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다.

 

전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.

 

제한사항

  • 전체 학생의 수는 2명 이상 30명 이하입니다.
  • 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
  • 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
  • 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.
  • 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.

입출력 예

n lost reverse return
5 [2, 4] [1, 3, 5] 5
5 [2, 4] [3] 4
3 [3] [1] 2

입출력 예 설명

예제 #1
1번 학생이 2번 학생에게 체육복을 빌려주고, 3번 학생이나 5번 학생이 4번 학생에게 체육복을 빌려주면 학생 5명이 체육수업을 들을 수 있습니다.

예제 #2
3번 학생이 2번 학생이나 4번 학생에게 체육복을 빌려주면 학생 4명이 체육수업을 들을 수 있습니다.

 


탐욕법 알고리즘이란?

  • 문제를 작은 단위로 쪼개고 반복적으로 진행하며 접근하는 방식은 완전탐색 등과 유사
  • But, 탐욕법은 각 단계에서 그 시점에 가장 좋아 보이는 선택을 한다.
  • 앞으로의 선택 혹은 최종 결과는 고려하지 않는다.
  • 탐욕법의 해가 반드시 최적의 해라는 보장은 없다.

 

와 같은 특징을 갖고 있습니다. 탐욕법은 당장 앞에 보이는 가장 좋아보이는 선택을 하는 특징이 있는데, 이는 반드시 최적의 해임을 보장할 수는 없지만, 간단한 알고리즘문제의 경우  괜찮은 결과를 보여주기도 하는 풀이방법

 

1.해 선택(selection procedure) : 지금 당시에 가장 최적인 해를 구한뒤, 이를 부분해 집합에 추가

2.적절성 검사(feasibility check) : 새로운 부분해 집합이 적절한지 검사

3.해 검사(solution check) : 새로운 부분해 집합이 문제의 해가 되는지 검사 

                                         -> 아직 문제의 해가 완성되지 않았다면 1번 부터 다시 시작

 

<<생각해보자>>

  • 안전빵으로 체육수업들을 수 있는 학생의 수가?

((전체 학생수 (n)에서 lost 배열의 길이(학생수) 만큼 뺀 수 

                                      +

여벌을 가져왔는데? 도둑맞은 사람의 수 아닌가?))

 

  • 여분이 있는 학생의 값을 1씩 더하고 뺀 값이 lost 배열에 있는가?
  • 검사해서 true -> true인 reverse 배열의 값을 임의의 음수로 설정하자
  • 들을 수 있는 학생수를 ++하게 하고 다음 reverse를 진행하자 이러면되려나?

=> 여벌을 가져왔던 친구가 도난을 당하면 그 친구는 1벌을 갖게 된다 

=> 여벌이 도난당하므로 자신이 입을 체육복만 소지한 채 일반 학생이 되어 answer에 +1 해주어야 하지(잃어버리지도 여벌도 없으니)

 

 

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        int[] student = new int[n+1];
        //1 ~ 30이니까 그냥 n이라고 정의하고 시작하자
        
        //student 배열 초기화하자
        for(int i = 1; i <= n; i++)
            student[i] = 1;
        
        for(int l:lost){
            student[l]--;
        }
        for(int r:reserve){
            student[r]++;
        }
        
        //없는 친구끼리 빌려주자
        for(int i=1;i<=n;i++){
            if(student[i]==0){
                if(i+1<=n && student[i+1]==2){
                    student[i+1]--;
                    student[i]++;
                } else if(i-1>=1 && student[i-1]==2){
                    student[i-1]--;
                    student[i]++;
                }
            }
        }
        
     // 체육복을 1개이상 가지고 있으면 수업을 들을 수 있음
        for(int i=1;i<=n;i++){
            if(student[i]>=1)
                answer++;
        }
        
        return answer;
    }
}

 

 

<다른 사람이 푼 코드>

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        answer = n;
        for(int i = 0; i < lost.length; i++) {
            boolean rent = false; //여분이 있는지 없는지 체크
            int j = 0;
            while(!rent) {
                if(j == reserve.length) //reserve마지막까지 돌면 while나오기
                    break;
                if(lost[i] == reserve[j])  //if와 else if로 lost와 reserve상쇄
                {
                    reserve[j] = -1; 
                    rent=true;
                }
                else if(lost[i] - reserve[j] == 1 )
                {
                    reserve[j] = -1; 
                    rent=true;
                }
                else if(lost[i] - reserve[j] == -1)
                {
                    reserve[j] = -1; 
                    rent=true;
                }
                else
                    j++;
            }
            if(!rent) //여분이 있어 true로 바꿨다면 수행하지 않지만 아닐경우엔 수행
                answer--;
        }
        return answer;
    }
}

 

 

반응형

'Algorithm Study > Programmers' 카테고리의 다른 글

두 정수 사이의 합 / java  (0) 2019.08.28
2016년/java  (0) 2019.08.28
가장 큰 수 / java / 정렬  (0) 2019.08.17
k번째수/java/정렬(출제 빈도 높음)  (0) 2019.08.16
완주하지 못한 선수 / JAVA / Hash  (0) 2019.07.24
반응형

 

 

 

 

 

 

 

 

 

 

 

 

Log

 

httpClient는 아파치 재단에서 URL 클래스를 훨씬 좋게 만든 것 (HTTP 프로토콜로 요청/ 응답 수행 가능)

안드로이드 OS에도 표준탑재되어 서버에서 정보를 다운받는 용도로 사용한다.

 

public class Test127{
	public static void main(String[] args) throws IOException{
    	//CloseableHttpCilent : 실제로 요청 / 응답을 수행하는 핵심
        
         CloseableHttpClient httpClient = HttpClients.createDefault();
         
         String l = "http://192.168.2.11:8081/study3/Test126.jsp?pw=1234";
         HttpGet httpGet = new HttpGet(l); //get 방식요청
         httpGet.addHeader("User-Agent", "Mozila/5.0"); //헤더 조작 여지
         
         // execute 실제로 요청/응답을 수행한다. httpResponse가 응답이다
         CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
         
         int resCode = httpResponse.getStatusLine().getStatusCode();
         if(resCode == 200) {
        	 InputStream in = httpResponse.getEntity().getContent();
        	 BufferedReader bin = new BufferedReader(new InputStreamReader(in));
         // new InputStremReader(in, "utf-8") 한글 깨지면 이거 써라...
       
        	BufferedReader bin = new BufferedReader(new InputStreamReader(in));
          
        //  new InputStremReader(in, "utf-8") 한글 깨지면 이거 써라… **
       // why? => java default unicode / web default utf-8
 		String str = null;
 		while((str=bin.readLine())!=null){
 		System.out.println(str);
        }
      }
      
     }
     
   }
우리는 지금 Get 방식으로 사용하는 법을 배웠다. 많은 정보를 서버에서 다운받는 것에는 차이가 없다 GET이 든 POST든 Client에서 대량의 정보를 업로드 하려면 POST를 써야함 ** 위 코드와 많이 틀려지게 되니 이 점 유의할것 BufferedReader bin = new BufferedReader(new InputStreamReader(in)); ** new InputStremReader(in, "utf-8") 한글 깨지면 이거 써라… **

 

 

commons-logging.jar log4j-1.2.17.jar 은 lib 폴더에 넣는다.

Commons-logging.properties, log4j.properties는 src 폴더에 넣는다.

그러면 classes 폴더에 자동으로 복사된다. (실제 운영할 때는 classes 폴더에 넣으면 된다)

 

jar 파일이 버전이 다른 두개가 모이는 경우가 있는데 그럴 경우에는 안돌아가는 경우가 흔하다

 

Commons-logging.properties

# org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

> 원하는 것 고르고

 

 log4j.properties

log4j.appender.A2.File=./../0805/web/log.txt

>경로 고치고

 

<%@page import="org.apache.log4j.Logger"%>
<%! static Logger logger = Logger.getLogger("about"); %>
<% logger.info("HelloWorld"); %>

 

>실행시키고 하면 ! ==> log.txt <== HelloWorld 이런식으로 찍힌다!

 

1. Commons-logging 에 대한 설정이 commons-logging.properties에 있음

    Log4JLogger : log4j 를 내부적으로 사용하겠다는 설정

    Log4JLogger에 대한 설정이 log4j.properties가 된다

 

2. log4j.appender.A2.layout.ConversionPattern = [%d] %5p %d : %m%n

    %m%n 만 해도 됨ㅎㅎ [시간] INFO about : HelloWorld 이런 식으로 뜸

    로그 파일의 형식 지정 : 단순히 콘솔에 찍어보는 걸 넘어서 내부적인 동작을 고스란히 담아낼 수 있다.

    로그파일 분석 툴을 이용하면 사이트 전반의 분석을 가능하게 한다.

 

3. 실전에는 Util.L(…) 같은 거 만들어서 쓰는 경우가 많다.

 

 

pageNavigation

 

페이지 개수 = ((글 갯수 -1) / 페이지 크기 ) + 1
블럭 사이즈 (BS) : 10 단위로 하단에 보여짐
이전 페이지 : (BB!=1)
다음 페이지 : (BE != 총 페이지 수)
BB = ((CP -1)/ 10) * 10 +1 : 처음 보여줄 1 2 3 4 5 개 / CP 는 1 2 3 4 5 .. 들 중 하나

1. 정렬된 순서 보기

SELECT id, title FROM Temp10T ORDER BY id DESC;

 

2. rownum??

SELECT id, rownum FROM Temp10T;

SELECT id, rownum FROM Temp10T ORDER BY id DESC;

—row num은 order by 이전에 부여된다. 따라서 order by 이후에 rownum으로 쪼개는 건 무의미

 

— 그러면 orderby 시켜놓고 그 다음에 rownum 붙이겠다?

SELECT id, rownum FROM ( SELECT id FROM Temp10T ORDER BY id DESC );

 

3. rownum을 기준으로 페이지 나누기?

SELECT id, rownum FROM ( SELECT id FROM Temp10T ORDER BY id DESC ) WHERE rownum > 0 AND rownum <= 5;

SELECT id, rownum FROM ( SELECT id FROM Temp10T ORDER BY id DESC ) WHERE rownum > 5 AND rownum <= 10;

Rownum 이 10까지 없고 모자란다? 5개 가져오는 중에 5~10 사이가 없음 안됨

 

4. rownum을 field로 굳혀놓고 나누기!!

SELECT id, rownum as sq FROM ( SELECT id FROM Temp10T ORDER BY id DESC );

SELECT id FROM ( SELECT id, rownum as sq FROM ( SELECT id FROM Temp10T ORDER BY id DESC ) ) WHERE sq > 0 AND sq <= 5; SELECT id FROM ( SELECT id, rownum as sq FROM ( SELECT id FROM Temp10T ORDER BY id DESC ) ) WHERE sq > 5 AND sq <= 10;

 

5. 서브쿼리로 정리해서 깔끔하게!!

SELECT * FROM Temp10T WHERE id IN ( SELECT id FROM ( SELECT id, rownum as sq FROM ( SELECT id FROM Temp10T ORDER BY id DESC ) ) WHERE sq > 10 AND sq <= 20 ) ORDER BY id DESC;

 

select * from (select id, rownum as sq from (select id from temp10t where 0=0 order by id desc))

where sq>20 and sq<=30;

 

6. 나중의 검색을 위해서 0 = 0 은 그냥 끼워 넣어준다(검색을 어떻게 할지 생각해 보자)

SELECT * FROM Temp10T WHERE id IN ( SELECT id FROM ( SELECT id, rownum as sq FROM ( SELECT id FROM Temp10T WHERE 0 = 0 ORDER BY id DESC ) ) WHERE sq > 5 AND sq <= 10 ) ORDER BY id DESC;

 

여기에서 0 = 0 을 응용하여 검색기능에서의 나누기 시도한다.

 

StringBuffer find = new StringBuffer(" WHERE 0 = 0"); if( title != null ){ find.append(" AND title LIKE '%"); find.append( title ); find.append("%'"); } if( user != null ){ find.append(" AND user ='"); find.append( title ); find.append("'"); } if( content != null ){ find.append(" AND content LIKE '%"); find.append( content ); find.append("%'"); }

 

String subSql = "SELECT id FROM " + "( SELECT id, rownum as sq FROM " + "( SELECT id FROM Temp10T "+ find.toString() + " ORDER BY id DESC ) )" + "WHERE sq > 5 AND sq <= 10";

 

String countSql = "SELECT COUNT(*) FROM Temp10T " + find.toString(); String sql = "SELECT * FROM ("+ subSql +") ORDER BY id DESC";

 

그러면 아래와 같은 형태의 결과를 보게 될 것이다.

 

SELECT COUNT(*) FROM Temp10T WHERE 0 = 0 AND user = 'root' AND content LIKE '%ab%'

....

SELECT * FROM Temp10T WHERE id IN ( SELECT id FROM ( SELECT id, rownum as sq FROM ( SELECT id FROM Temp10T WHERE 0 = 0 AND user = 'root' AND content LIKE '%ab%' ORDER BY id DESC ) ) WHERE sq > 0 AND sq <= 3 ) ORDER BY id DESC;

 

0=0 위치가 검색 조건이 들어갈 위치

select * from temp10t where id in(select id from (select id, rownum sq from (select id from temp10t where title like '%bc%' order by id desc))where sq>0 and sq<=10) order by id desc;

 

Mysql

create table Temp10t(

-> id integer(3),

-> title varchar(7));

~insert로 입력

 

select * from temp10t order by id desc limit 0, 10;

10 씩 쪼개줌

select * from temp10t order by id desc limit 10, 10;

10개 세고 또 10개

 

> form-group으로 지정된 div를 이용하여 label과 input을 한쌍으로 묶어서 보여준다

<form role="form">
 <div class="form-group">
 <label for="email">이메일</label>
 <input type="text" id="email" class="form-control"/>
 </div>
</form>

 

>그리드 이용하여 모바일용 화면과 pc용 화면을 하나의 페이지에서 구현한 사례

<div class="row">
   <div class="col-xs12 col-sm-4">
     <form role="form">
       <div class="form-group">
         <label for="email">이메일</label>
         <input type="text" id="email" class="form-control temp"/>
         </div>
       <div>
         <label>암호</label>
         <input type="password" id="password" class="form-control" />
       </div>
     </form>
   </div>
</div>

 

>> form에 추가 

class = "form-inline"
sm 크기 이상인 경우 class="form-inline"이 지정되면 라벨과 컨트롤은 좌우로 배치된다.
input 크기가 가지런하지 않아 이 부분 개선 class="form-hoizontal"로 지정된 경우에 라벨과 인풋이 가지런하게 배치되도록 할 수 있다

input은 div에 넣어 크기를 지정하고
label의 class에 크기를 지정한다

 

JavaScript

<a href = "javascripts:alter('<%=1%>');"> Click </a>

브라우저가 요청하면 서버가 요청을 받고, 요청에 해당하는 servlet/jsp가 동작한다

보여지는 브라우저 상 에서 javascript는 동작한다

 

jsp 에서 javascript 코드를 생성하는 일은 가능하다.

하지만 javascript에서 jsp쪽이 코드를 생성하는 일은 불가능하다.

왜? jsp가 먼저 동작하기 때문에

 

함수의 매개변수의 갯수가 틀려도 호출된다.
만일 갯수가 틀리면 앞의 변수부터 대입이 된다.
변수 선언시에는 var라는 키워드를 사용한다.
변수는 모든 값이 대입 가능 (정수, 문자열, 실수, 함수, 객체...)
두번 선언해도 에러 안나고, var없이 선언해도 에러 안난다
script 태그 안에 있는 코드는 페이지가 모두 로딩 되지 않은 상태에서
호출 변수를 선언하지 않고 사용하면 초기값은 undefined이고 여난이 불가능하다.
var total=0; 코드가 빠졌을 때 에러가 나는 이유를 점검하자.
java는 블럭 안에서 선언한 변수는 블럭에서만 쓸 수 있는 개념인데
javascript는 선언만 되어 있으면 쓸 수 있고, 선언 안해도 쓴다


모든 html 요소는 id 속성을 가질 수 있다 

속성 값은 pk처럼 겹치면 안된다

 

Document.getElementById("abcd") : id 값으로 객체의 포인터를 찾는다

 

window.onload = function(){
 var op = document.getElementById("abcd");
 op.onclick = function () {
 alert();
 }
}

/*op라는 포인터 변수로 해당 객체를 가리킨다
  포인터를 통해 객체가 가진 속성을 읽고, 조작할 수 있다
  op.onclick은 op 포인터가 가리키는 객체의 onclick 이라는 변수(프로퍼티)
  javascript 변수는 다 가리킬 수 있다.
  onclick은 이름없는 함수와 다름 없다.
  가리키는 것과 호출하는 것은 다르다(여기서는 가리키기만 한다.)
  
  호출되는 시점? 
  op 가리키는 객체에 click 상황이 벌어지면 onclick 이 가리키는 함수가 호출된다.
	
  이벤트 처리의 두가지 방법
	1. onXXX 속성을 이용하는 방법 : onclick="alert();"
	2. onXXX 속성을 함수포인터로 쓰는 방법 : 위 코드의 방법.(이 방법이 더 많이 스임).*/

 

 

window.onload = function(){
 var is = document.getElementsByTagName("img");
 for(var i=0;i<is.length;i++){
 alert(is[i].src);
 }
}

/*ls[0] = function(){alter(i)} 가리키는 시점에서는 i가 0인데, 호출하는 시점에서는 4가 된다

가리키는 시점의 값과 호출하는 시점의 값이 같아야 한다

=> 함수의 매개변수를 활용한 로컬변수를 사용해야한다*/
반응형

'Language Study > Java' 카테고리의 다른 글

6. 자바, 더 간편하게  (0) 2019.09.08
5. 자바, 더 정확하게  (0) 2019.09.08
제주에서 자바_Week3_4  (0) 2019.08.11
##자바 헷갈리는 이론  (0) 2019.08.01
제주에서 자바_Week3_3  (0) 2019.07.31
반응형

 

 

 

 

 

 

 

 

 

<MVC 아키텍쳐>

MVC 이전
Model DAO
View HTML 영역
Controller java영역(서블릿)

 

MODEL(DAO)

package study;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class BangMyungDAO_OracleImpl implements BangMyungDAO
{
     @Override
     public void add(BangMyungVO vo) throws Exception
     {
         Connection conn = null;
         Statement stmt = null;
         try {
                 Class.forName("oracle.jdbc.driver.OracleDriver");
                 conn =
            DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:32771/xe",
             "system", "1234");
                stmt = conn.createStatement();
             String sql = "insert into bangmyung_t values (
            seq_bangmyung.nextval, '"+
             vo.getGul() + "', sysdate )";
             stmt.executeUpdate( sql );
             }
                catch( Exception e ){ throw e; }
                finally {
                 if( stmt != null ) stmt.close();
                 if( conn != null ) conn.close();
                }
         }
         @Override
         public List<BangMyungVO> findAll() throws Exception {
             List<BangMyungVO> ls = new ArrayList<BangMyungVO>();
             Connection conn = null;
             Statement stmt = null;
             ResultSet rs = null;
         try {
             Class.forName("oracle.jdbc.driver.OracleDriver");
             conn =
        DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:32771/xe",
         "system", "1234");
             stmt = conn.createStatement();
             String sql = "SELECT no, gul, the_time FROM bangmyung_t order by
        no desc";
             rs = stmt.executeQuery( sql );
         while( rs.next() ) {
              BangMyungVO vo = new BangMyungVO();
             vo.setNo( rs.getInt("no") );
             vo.setGul( rs.getString("gul") );
             vo.setTheTime( rs.getString("the_time") );
             ls.add( vo );
         }
         }
         catch( Exception e ){}
         finally {
             if( rs != null ) rs.close();
             if( stmt != null ) stmt.close();
             if( conn != null ) conn.close();
         }
     return ls;
     }
}

VIEW(HTML)

<%@ page language="java" contentType="text/html; charset=EUC-KR"
 pageEncoding="EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="sso" %>
<!DOCTYPE>
<html>
    <body>
        <table border='1'>
             <tr>
             <td>No</td>
             <td>글</td>
             <td>작성시간</td>
             </tr>
             <sso:forEach varStatus="vs" var="vo" items="${ lst }">
             <tr bgColor="${ (vs.count % 2 != 0)?'#aabbcc':'#bbccdd' }">
                 <td>${ vs.count }</td>
                 <td>${ vo.no }</td>
                 <td>${ vo.gul }</td>
                 <td>${ vo.theTime }</td>
             </tr>
             </sso:forEach>
        </table>
        <form method="POST" action="bangmyung_add.jsp">
         <input type="text" name="gul" size="50"/>
         <input type="submit"/>
        </form>
    </body>
</html>

 

CONTROLLER(JAVA)

<%@ page language="java" contentType="text/html; charset=utf-8"
 pageEncoding="utf-8" import="java.util.List, study.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="sso" %>
<%!
 public void submit() {
 System.out.println("submit");
 }
%>
<%
     // 1. 변수선언
     List<BangMyungVO> rl = null;
     Exception err = null;
     // 2. DB 연동
     BangMyungDAO dao = new BangMyungDAO_OracleImpl();
     try {
     rl = dao.findAll();
     } catch (Exception e) {
     err = e;
     }
     // 3. 흐름 만들기
     if ( rl == null || err != null ) {
     response.setCharacterEncoding("utf-8");
     response.sendRedirect("/study3/error.jsp");
     } else {
     request.setAttribute("lst", rl);
     RequestDispatcher rd = request.getRequestDispatcher("/Test125_1.jsp");
     rd.forward(request, response);
    %>
<!DOCTYPE>
<html>
    <body>
        <table border='1'>
         <tr>
             <td>No</td>
             <td>글</td>
             <td>작성시간</td>
         </tr>
         <sso:forEach varStatus="vs" var="vo" items="${ lst }">
         <tr bgColor="${ (vs.count % 2 != 0)?'#aabbcc':'#bbccdd' }">
             <td>${ vs.count }</td>
             <td>${ vo.no }</td>
             <td>${ vo.gul }</td>
             <td>${ vo.theTime }</td>
         </tr>
         </sso:forEach>
        </table>
    <form method="POST" action="bangmyung_add.jsp">
     <input type="text" name="gul" size="50"/>
     <input type="submit"/>
    </form>
    <% } %>
    </body>
</html>

 

MVC 만들기

package mvc;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public interface Controller {
         public String handleRequest(HttpServletRequest request,
        HttpServletResponse response) throws Exception;
}
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
    public @interface RequestMapping {
     public String value();
}
package mvc;
//import 생략~
    public class DispatcherServlet extends HttpServlet {
     private Map<String, Controller> map = null;

     @Override
     public void init(ServletConfig config) throws ServletException{
         map = new Hashtable<String, Controller>();

         String cs = "mvc.CtrlList,mvc.CtrlAdd2";
         for(String str : cs.split(",")){
         try{
             //해당 클래스 가져오고
             Class<?> cls = Class.forName(str);
             //RequestMapping에서 지정된 url 패턴 따오고
             RequestMapping an = cls.getAnnotation(RequestMapping.class);
            //얘 때문에 Controller에너는 Annotation!
             System.out.println("this is an : " + an);
             //해당 controller instance 받아오고
             Controller value = (Controller) cls.newInstance(); 
             // 이름이 str인 Controller 클래스 찾기
             // url 따기
             String key = an.value();
             //url-pattern과 controller 매핑
                 map.put(key, value);
                 }catch (Exception e) {}
                 } //String[] cs2 = cs.split(","); for(int i=0;i<cs2.length;i++)
                 System.out.println(map.toString());
         }
     @Override
     protected void service(HttpServletRequest request, HttpServletResponse
    response)
     throws IOException, ServletException {
     }
 }
package mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

    @RequestMapping("/apple_list.do")
    public class CtrlList implements Controller {

     @Override
         public String handleRequest(HttpServletRequest request,
    HttpServletResponse response) throws Exception {
         return null;
 }
package mvc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@RequestMapping("/apple_add2.do")
public class CtrlAdd2 implements Controller{

     @Override
     public String handleRequest(HttpServletRequest request,
    HttpServletResponse response) throws Exception {
     return null;
     }
 }

JSP MODEL1 / MVC MODEL2

 

 

model1 VS model2

<model1>

가장먼저 들어오는 곳이 JSP이다.

JSP에서 비즈니스 로직, VIEW모든 것을 처리한다.

 

<model2>

가장먼저 요청하는 곳이 서브릿단이다.

비즈니스 로직을 처리하는 서블릿을 완전히 분리시켜서 VIEW단과 로직을 처리하는 단을 분리시킨다.




 

 

Controller 추가해야할 때

<servlet>
 <servlet-name>abcd2</servlet-name>
 <servlet-class>mvc.DispatcherServlet</servlet-class>
     <init-param>
         <param-name>controllers</param-name>
         <param-value>
         mvc.CtrlList,
         mvc.CtrlAdd2
         </param-value>
     </init-param>
</servlet>

<!-- 여기 이렇게 controller를 추가하면 되지 않을까! -->

public void init(ServletConfig config) throws ServletException{
 map = new Hashtable<String, Controller>();
 String cs = config.getInitParameter("controllers");

 

HTML 소스 긁어오는애

package main;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;
public class Test126 {
     public static void main(String[] args) throws Exception{
         URL rl = new URL("http://localhost:8081/0802/apple_list.do");
         URLConnection ucon = rl.openConnection();
         InputStream in = ucon.getInputStream();

     BufferedReader bin = new BufferedReader(new InputStreamReader(in,
    "UTF-8")); //>> char 단위로 읽게해주는 adapter
     //사실 UTF-8 빼도 되더라 얜 응답 내용
            String l = null;
         while((l = bin.readLine()) !=null){

         System.out.println(l);
         }
     in.close();
    }
}

java.net.URL은 이것 자체가 작은 웹브라우저의 역할을 한다. 요청을 날리고 그에 해당하는 응답을 받아들인
다 안드로이드 앱에서 버튼을 누르면 오늘의 배송정보가 넘어오는 ? 배송정보는 서버에 올라와 있는 상태! => 이
다운 받는 역할, 서버에 존재하는 배송정보를 다운받는 역할을 수행한다. 소켓으로 다 짜는 것이 아니라 http 프
로토콜로 서버와 통신할 때는 이 클래스를 주로 이용한다.
소켓으로 다 짜는 것이 아니라 http 프로토콜로 서버와 통신할 때는 이 클래스를 주로 이용한다.
앱 같은 경우에서 서버로부터 많은 데이터를 다운 받아야 할 경우에 URL 클래스를 이용하여 jsp 파일로부터 정
보를 다운받는다
이게 워낙 많이 쓰이다 보니 이를 강화한 오픈 소스 라이브러리가 등장 = apache http client 프로젝트 = 안
드로이드의 http 기반 표준 통신 수단

 

암호가 맞으면 다운, 아니면 안됨

    <%@ page contentType="text/plain; charset=UTF-8" pageEncoding="EUC-KR" %><%
     String pw = request.getParameter("pw");
     if(pw.equals("1234")){
         String[] l = {"사과", "귤", "배", "토마토"};
         String nl = "\r\n"; //줄 바꿈 표시

     for (int i = 0; i < l.length; i++) {%>
         <%=l[i]%><%=nl%>
         <%}}else{%>
         암호틀림
 <%}%>
public static void main(String[] args) throws Exception{
     URL rl = new URL("http://localhost:8081/0802/Test126.jsp?pw=1230");
     URLConnection ucon = rl.openConnection();
     InputStream in = ucon.getInputStream();

     BufferedReader bin = new BufferedReader(new InputStreamReader(in, "UTF8")); //>> char 단위로 읽게해주는 adapter
     //사실 UTF-8 빼도 되더라 얜 응답 내용

     String l = null;
     while((l = bin.readLine()) !=null){
         System.out.println(l);
         }
         in.close();
}
반응형

'Language Study > Java' 카테고리의 다른 글

5. 자바, 더 정확하게  (0) 2019.09.08
제주에서 자바_Week4  (0) 2019.08.12
##자바 헷갈리는 이론  (0) 2019.08.01
제주에서 자바_Week3_3  (0) 2019.07.31
제주에서 자바_Week3_2  (0) 2019.07.30

+ Recent posts