안녕들 하시죠!

이번시간에는 Bootstrap 사용법에 대해 알아보겠습니다.

 

1. Bootstrap 라이브러리 다운

 

Bootstrap 공식 홈페이지에 가면 다운받을 수 있습니다.

http://bootstrapk.com/getting-started/

아래에 파일을 첨부했고, 저는 3.3.2 버전을 사용했습니다.

bootstrap-3.3.2-dist.zip
0.25MB
bootstrap-4.3.1-dist.zip
0.68MB

2. eclipse에 Bootstrap 라이브러리 폴더 만들기

 

WebContent 밑에 resources라는 폴더를 만들고 라이브러리를 압축 풀어 드래그해 넣었습니다.

3. Bootstrap 샘플 얻기

 

여러 사이트가 있지만 저는 https://www.bootdey.com/ 에서 샘플을 찾아보았습니다.

원하는 샘플을 찾아 클릭해 들어갑니다.

저는 개인프로필 샘플을 찾아들어갔습니다.

https://www.bootdey.com/snippets/view/gray-profile

 

 

4. HTML code 복사

 

원하는 .jsp나 .html 파일에 HTML code를 복사해 <body>태그 안에 붙여넣기 합니다.

 

5. CSS 파일 만들기

CSS code 부분 복사 -> 아까 만들어 둔 eclipse의 resources 폴더의 css 폴더에 .css 파일을 하나 만들기 -> 붙여넣기.

6. Bootstrap CDN 추가

 

HTML code를 복사 붙여넣기 했던 페이지에 CDN 코드 추가.

<link rel="stylesheet" href="resources/css/bootstrap.css">
<!-- CSS code를 복사해 붙여넣은 PersonInfo, 본인 파일명과 root를 작성해주세요 --!>
<link rel="stylesheet" href="resources/css/PersonInfo.css"> 
<script src="resources/js/bootstrap.js"></script>

7. 결과화면

 

 

오늘은 여기까지입니다.

궁금한점 있으시면 댓글이나 쪽지 부탁드려요 감사합니다.

안녕들 하시죠 !

이번시간에는 프로그래머스 Level2에 있는 '가장 큰 수' (정렬) 문제를 풀어보겠습니다.

 

문제

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

 

코드설명

- 숫자를 String 형으로 변환

1
2
3
4
5
6
7
// 숫자를 String 문자형으로 바꾸기 위해 strNumbers 라는 String형 배열 준비.
String[] strNumbers = new String[numbers.length]; 
 
// String형 배열 strNumbers에 valueOf 메소드를 사용해 숫자를 문자로 바꿔 저장.  
for (int i = 0; i < numbers.length; i++) {
    strNumbers[i] = String.valueOf(numbers[i]);
cs

* valueOf() 메소드

인자에 들어있는 객체를 String 객체로 형 변환시켜주는 메소드.

1
2
3
4
String number = "1234567890"
String sNumbers = String.valueOf(number);
String tbool = String.valueOf(true);
String fbool = String.valueOf(false);
cs

 

- Arrays API를 사용해 정렬

1
2
3
4
5
6
7
8
9
// 컬렉션 프레임워크 Arrays 클래스의 sort 메소드사용.
// Comparator 메서드를 사용해 객체간의 특정한 정렬을 한다.
// compare() 메서드를 오버라이딩해서 숫자간 비교.
Arrays.sort(strNumbers, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
    return (o2 + o1).compareTo(o1 + o2);
    }
});
cs

 

- 예외 처리

1
2
3
4
// 맨 처음 문자가 0이면 0반환
if (strNumbers[0].equals("0")) {
    return "0";
}
cs

- 순차적으로 저장 후 return

1
2
3
4
5
6
// String strNumber에 순차적으로 저장해 answer로 return 
String answer = "";
for (String strNumber : strNumbers) {
    answer += strNumber;
}
return answer;
cs

 

 

전체 코드
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.util.Arrays;
import java.util.Comparator;
 
public class Solution {
 
    public String solution(int[] numbers) {
        // 숫자를 String 문자형으로 바꾸기 위해 strNumbers 라는 String형 배열 준비.
        String[] strNumbers = new String[numbers.length];
 
        // String형 배열 strNumbers에 valueOf 메소드를 사용해 숫자를 문자로 바꿔 저장.
        for (int i = 0; i < numbers.length; i++) {
            strNumbers[i] = String.valueOf(numbers[i]);
        }
 
        // 컬렉션 프레임워크 Arrays 클래스의 sort 메소드사용.
        // Comparator 메서드를 사용해 객체간의 특정한 정렬을 한다.
        // compare() 메서드를 오버라이딩해서 숫자간 비교.
        Arrays.sort(strNumbers, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return (o2 + o1).compareTo(o1 + o2);
            }
        });
 
        // 맨 처음 문자가 0이면 0반환
        if (strNumbers[0].equals("0")) {
            return "0";
        }
 
        // String strNumber에 순차적으로 저장해 answer로 return
        String answer = "";
        for (String strNumber : strNumbers) {
            answer += strNumber;
        }
 
        return answer;
 
    }
 
    public static void main(String[] args) {
        Solution s = new Solution();
        int number[] = { 6102 };
        int number2[] = { 3303459 };
        System.out.println(s.solution(number));
        System.out.println(s.solution(number2));
    }
}
cs

 

오늘은 여기까지입니다 감사합니다.

'Java' 카테고리의 다른 글

Java) 가장 큰 수 ( 정렬 )  (0) 2019.10.02
Java의 Math 클래스  (0) 2019.05.17
Java의 문자열 분리 (StringTokenizer)  (0) 2019.05.16
Java의 == 연산자와 equals 메소드  (0) 2019.05.13
Java의 추상 클래스  (0) 2019.05.11
Java의 생성자  (0) 2019.04.29

안녕들 하시죠!

이번 시간에도 '사내 DB테이블'을 이용한 문제풀이를 통해 ORACLE SQL 쿼리문을 복습해보겠습니다.

 

언어 및 툴

ORACLE DATABASE, SQLDEVELOPER

 

테이블 생성 참고

2019/09/28 - [Database] - ORACLE SQL 쿼리 복습을 위한 '사내 DB테이블' 세팅

 

쿼리 실행 순서

5 SELECT 
1 FROM 
2 WHERE
3 GROUP BY
4 HAVING
6 ORDER BY

 

문제

1. 사원수가 3명 이상인 부서명과 인원수를 출력하시오. ( group by, having )

having절 -- group by로 묶은 값들에 조건을 추가한다 (=where)

SELECT [그룹으로 묶은 컬럼명]
     , [집계할 컬럼명]
FROM [테이블명]
GROUP BY [그룹으로 묶을 컬럼명]
HAVING [그룹으로 묶은 값에 조건 추가]

count 함수 -- 테이블 전체 행 검색 ( count(*) )

                   특정 컬럼의 숫자 검색 ( count(컬럼명) )

1
2
3
4
5
select job
     , count(*)
from emp
group by job
having count(*>= 3;
cs

 

2. 직무 중 가장 적게 수입을 가지는 직무의 평균 월급을 출력하시오.
1
2
3
select min(AVG(sal)) 
from emp 
group by job;
cs

 

3. 사원번호, 사원이름, 부서이름, 부서번호를 출력하시오. ( Join )

Oracle 내부조인 -- 테이블간에 동일한 컬럼을 조인

1
2
3
4
5
6
7
select emp.ename
     , emp.empno
     , dept.dname
     , dept.deptno
from emp
   , dept
where emp.deptno = dept.deptno;
cs

Natural 조인 -- 테이블간에 동일한 모든 컬럼을 조인 

1
2
3
4
5
select ename
     , empno
     , dname
     , deptno
from emp natural join dept;
cs

Join On -- 조인의 세부조건을 지정할 수 있다.

1
2
3
4
5
6
select ename
     , empno
     , dname
     , dept.deptno
from emp join dept
on emp.deptno = dept.deptno;
cs

Join Using -- 컬럼을 선택해서 조인.

1
2
3
4
5
6
select ename
     , empno
     , dname
     , deptno
from emp join dept
using (deptno);
cs

 

 

 

4. 부서가 30이고, 급여가 1500이상인 사원의 이름, 급여, 부서명, 부서번호를 출력하시오. ( Join on )
1
2
3
4
5
6
7
8
select emp.ename
     , emp.sal
     , dept.dname
     , dept.deptno
from emp join dept
on emp.deptno = dept.deptno
where emp.deptno = 30
and sal >= 1500;
cs

 

5. 사원수가 5명이 넘는 부서의 부서명과 사원수를 출력하시오.

 

1
2
3
4
5
6
7
8
select dept.dname
     , count(*)
from emp
   , dept
where emp.deptno = dept.deptno
group by emp.deptno
       , dept.dname
having count(*>= 5;
cs

 

6. ADAMS 사원이 근무하는 부서이름과 지역이름을 출력하시오.
1
2
3
4
5
6
7
select dept.dname
     , dept.loc
     , emp.ename
from emp
   , dept
where emp.deptno = dept.deptno
and emp.ename = 'ADAMS';
cs

 

7. NEW YORK 이나 DALLAS 지역에 근무하는 사원들의 사원번호, 사원이름을 사원번호 순으로 검색하시오.
1
2
3
4
5
6
7
select e.empno
     , e.ename
from emp e
   , dept d
where e.deptno = d.deptno
and (d.loc = 'NEWYORK' or d.loc='DALLAS')
order by e.empno;
cs

오늘은 여기까지입니다 감사합니다.

안녕들 하시죠!

저번시간부터 개인 홈페이지 프로젝트에 기능들을 하나 하나 추가해보고 있습니다.

저번 게시물에 dao, vo, servlet, service, exception 패키지를 추가하고 가겠습니다.

다음 게시물부터는 기능을 하나씩만 추가할 생각이라 글이 좀 짧아질 것 같습니다.

 

사용언어와 문법

Oracle database, HTML5, Javascript, JSP/Servlet, JQuery, EL, JSTL 등

 

MVC 패턴

 

DupchkServlet(중복체크), JoinServlet, LoginServlet -> CustomerService -> CustomerDAO

 

SearchZipServlet(우편번호찾기) -> ZipService -> ZipDAO

 

뒷단 구성에 사용될 클래스들

 

DupchkServlet(중복체크), JoinServlet, LoginServlet -> CustomerService -> CustomerDAO

DupchkServlet

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
34
35
36
37
38
package Servlet;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import my.service.CustomerService;
 
 
@WebServlet("/dupchk")
public class DupchkServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private CustomerService service;
    
    public DupchkServlet() {
        service = new CustomerService();
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String id = request.getParameter("id");
        
        // Service 단 연결
        CustomerService service = new CustomerService();
        String str;
        str = service.dupchk(id);
                        
        request.setAttribute("result", str);
        String path= "/result.jsp";
        RequestDispatcher rd = request.getRequestDispatcher(path);
        rd.forward(request, response);
        
    }
}
cs

JoinServlet

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package Servlet;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import my.service.CustomerService;
import my.vo.Customer;
 
@WebServlet("/join")
public class JoinServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private CustomerService service;
    
    public JoinServlet() {
        super();
        service = new CustomerService();
    }
 
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String id = request.getParameter("id");
        String pwd = request.getParameter("pwd");
        String name = request.getParameter("name");
        String buildingno = request.getParameter("buildingno");
        String addr = request.getParameter("zipcode"+ "/" + request.getParameter("addr1"+ "/" + request.getParameter("addr2");
        
        Customer c = new Customer();
        c.setId(id);
        c.setPwd(pwd);
        c.setName(name);
        c.setBuildingno(buildingno);
        c.setAddr(addr);
        
        String str = service.join(c);
        request.setAttribute("result",  str);
        
        String path = "/result.jsp";    
        RequestDispatcher rd = request.getRequestDispatcher(path);
        rd.forward(request, response);
        
    }
}
cs

LoginServlet

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package Servlet;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
 
import my.service.CustomerService;
 
@WebServlet("/login"// servlet url,로그인 요청을 하게 되면 가장 먼저 LoginServlet을 호출하게 된다.
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private CustomerService service;
    
    public LoginServlet() { // 생성자에서 service객체 자동 생성
        service = new CustomerService();
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
 
        String path = "/result.jsp";
        
        String id = request.getParameter("id");
        String pwd = request.getParameter("pwd");
        
        HttpSession session = request.getSession();
        session.removeAttribute("loginInfo");
        
        String str = service.login(id, pwd);
        /*--로그인성공시 HttpSession객체의 속성으로 추가 --*/
        JSONParser parser = new JSONParser();
        try {
            Object obj = parser.parse(str);
            JSONObject jsonObj = (JSONObject)obj;
            if((Long)jsonObj.get("status"== 1) {//로그인 성공!
                session.setAttribute("loginInfo", id);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        request.setAttribute("result", str);
        RequestDispatcher rd = request.getRequestDispatcher(path);            
        rd.forward(request, response);        
    }
}
cs

CustomerService

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package my.service;
 
import java.sql.SQLException;
 
import org.json.simple.JSONObject;
 
import my.dao.CustomerDAO;
import my.exception.NotFoundException;
import my.vo.Customer;
 
public class CustomerService {
    private CustomerDAO dao;
 
    public CustomerService() {
        dao = new CustomerDAO();
    }
    
    public String login(String id, String pwd) { 
        int status = -1;
        
        try {
            Customer c = dao.selectById(id);
            if (c.getPwd().equals(pwd) && c.getStatus() == 1) {
                status = 1;    
            } 
            else if(c.getStatus() == 0){
                status = -1;     
            }
                 
        } catch (SQLException | NotFoundException e) {
            e.printStackTrace();
        }
        
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("status", status);
        jsonObj.put("id", id);
        String str = jsonObj.toString();
        return str;
    }
 
    public String join(Customer c) {
        int status = -1;
        try {
            status = dao.joinMember(c);
        } catch (NotFoundException e) {
            e.printStackTrace();
            status = -1;
        }
        String str = "{\"status\":\"" + status + "\"}";
        return str;
    }
 
    public String dupchk(String id) {
        int status = 1;
        try {
            dao.selectById(id);
            status = -1;
        } catch (SQLException | NotFoundException e) {
            e.printStackTrace();
            status = 1;
        }
        
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("status", status);
 
        String str = jsonObj.toString();
        return str;
    }
}    
cs

CustomerDAO

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package my.dao;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
 
import my.exception.NotFoundException;
import my.vo.Customer;
import my.dao.CustomerDAO;
 
public class CustomerDAO {
    // oracle db와의 연동
    Connection con = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
 
    String url = "jdbc:oracle:thin:@localhost:1521:xe";
    String user = "C##ora_user";
    String pw = "hong";
 
    public CustomerDAO() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
 
    public void CloseDB() throws SQLException {
        if (rs != null)
            rs.close();
        if (pstmt != null)
            pstmt.close();
        if (con != null)
            con.close();
    }
 
    public Customer selectById(String id) throws SQLException, NotFoundException { // login, dupchk할때 SELECT문으로 DB에서 ID를 찾는다.
        Customer customer = new Customer();
        String SelectSQL = "Select * from customers where Customer_id=?";
 
        con = DriverManager.getConnection(url, user, pw);
        pstmt = con.prepareStatement(SelectSQL);
        pstmt.setString(1, id);
        rs = pstmt.executeQuery();
 
        String dbid = null;
        String dbpwd = null;
        String dbaddr = null;
        String dbname = null;
        String dbbuildingno = null;
        int customerStatus = 0;
 
        if (rs.next()) {
            dbid = rs.getString("customer_id");
            dbpwd = rs.getString("customer_pwd");
            customerStatus = rs.getInt("customer_status");
            dbaddr = rs.getString("CUSTOMER_ADDR");
            dbname = rs.getString("CUSTOMER_NAME");
            dbbuildingno = rs.getString("customer_buildingno");
 
            customer.setId(dbid);
            customer.setPwd(dbpwd);
            customer.setStatus(customerStatus);
            customer.setAddr(dbaddr);
            customer.setName(dbname);
            customer.setBuildingno(dbbuildingno);
 
        } else {
            throw new NotFoundException("아이디가 존재하지 않습니다 !");
        }
        CloseDB();
        return customer;
    }
 
    public int joinMember(Customer c) throws NotFoundException { // join 할때 DB에 INSERT문으로 삽입
 
        int status = -1;
        String query = "INSERT INTO CUSTOMERS(CUSTOMER_ID,CUSTOMER_STATUS,CUSTOMER_PWD,CUSTOMER_NAME,CUSTOMER_BUILDINGNO,CUSTOMER_ADDR) VALUES ( ?, ?, ?, ?, ?, ?)";
 
        try {
            con = DriverManager.getConnection(url, user, pw);
            pstmt = con.prepareStatement(query);
            pstmt.setString(1, c.getId());
            pstmt.setInt(21);
            pstmt.setString(3, c.getPwd());
            pstmt.setString(4, c.getName());
            pstmt.setString(5, c.getBuildingno());
            pstmt.setString(6, c.getAddr());
            pstmt.executeUpdate();
            status = 1;
        } catch (SQLException e) {
            e.printStackTrace();
            status = -1;
        }
        try {
            CloseDB();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return status;
    }
}
cs

 

SearchZipServlet(우편번호찾기) -> ZipService -> ZipDAO

SearchZipServlet

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
34
package Servlet;
 
import java.io.IOException;
 
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import my.service.ZipService;
 
@WebServlet("/searchzip")
public class SearchZipServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    public SearchZipServlet() {
        super();
       
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String input = request.getParameter("doro");
        ZipService service = new ZipService();
        String str = service.searchZip(input);
        
        request.setAttribute("result", str);
        String path= "/result.jsp";
        RequestDispatcher rd = request.getRequestDispatcher(path);
        rd.forward(request, response);
    }
}
 
cs

ZipService

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
34
35
36
37
38
39
40
package my.service;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
 
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
 
import my.dao.ZipDAO;
 
public class ZipService {
    private ZipDAO zdao;
    public ZipService(){
        zdao = new ZipDAO() ;
    }
    
    public String searchZip(String doro) {
        List<Map<String,String>> addrlist = new ArrayList<Map<String,String>>();
        Map<StringString> addrmap;
        addrlist = zdao.selectByDoro(doro);
        
        JSONArray jsonArr = new JSONArray();
        
        for(int i = 0 ; i < addrlist.size(); i++) {
            addrmap = addrlist.get(i);
            JSONObject obj = new JSONObject();
            obj.put("zipcode", addrmap.get("zipcode"));
            obj.put("doroaddr", addrmap.get("doroaddr"));
            obj.put("buildingaddr", addrmap.get("buildingaddr"));
            obj.put("buildingno", addrmap.get("buildingno"));
                
            jsonArr.add(obj);
        }
        return jsonArr.toString();
    }
}
cs

ZipDAO

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package my.dao;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class ZipDAO {
    String url = "jdbc:oracle:thin:@localhost:1521:xe";
    String user = "C##ora_user";
    String pw = "hong";
 
    public List<Map<StringString>> selectByDoro(String doro){
        
        List<Map<String,String>> addrlist = new ArrayList<Map<String,String>>();
        Connection conn = null;    
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        String doroname  = "SELECT zipcode,  \r\n" + 
                "sido||' ' \r\n" + 
                "|| sigungu ||NVL2(sigungu,' ', '')\r\n" + 
                "|| eupmyun ||NVL2(eupmyun,' ', '')\r\n" + 
                "|| doro ||' ' \r\n" + 
                "|| building1\r\n" + 
                "|| DECODE(building2,'0', '', '-'||building2) ||' ' \r\n" + 
                "|| '('|| dong || ri || DECODE(building, '', '', ',' ||building) ||')'" + 
                ","+
                "sido ||' ' \r\n" + 
                "|| sigungu ||NVL2(sigungu,' ', '')\r\n" + 
                "|| eupmyun ||NVL2(eupmyun,' ', '')\r\n" + 
                "|| dong || ri ||' ' ||  zibun1 || DECODE(zibun2, '0', '',  '-'|| zibun2)    || DECODE(building, '', '', ' (' ||building ||')') " +
                ","+
                "buildingno \r\n" +
                "FROM post\r\n" + 
                "WHERE (doro || ' ' || building1 || DECODE(building2,'0', '', '-'||building2)) LIKE ?";
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            
            conn = DriverManager.getConnection(url,    user, pw);
            pstmt =  conn.prepareStatement(doroname);
            pstmt.setString(1"%" + doro + "%");
            rs = pstmt.executeQuery();
            
            String zipcode ="";
            String doroaddr="";
            String buildingaddr="";
            String buildingno="";
        
            while(rs.next()) {
                zipcode = rs.getString(1);
                doroaddr = rs.getString(2);
                buildingaddr = rs.getString(3);
                buildingno = rs.getString(4);
                
                Map<StringString> resultMap = new HashMap<StringString>();
                resultMap.put("zipcode", zipcode);
                resultMap.put("doroaddr", doroaddr);
                resultMap.put("buildingaddr", buildingaddr);
                resultMap.put("buildingno", buildingno);
                addrlist.add(resultMap);
            }
        } catch(ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(rs != null) {
                try {
                    rs.close();
                }
                catch (SQLException e) {}
            }
            if(pstmt != null) {
                try {
                    pstmt.close();
                }
                catch (SQLException e) {}
            }
            if(conn != null) {
                try {
                    conn.close();
                }
            catch (SQLException e) {}
            }
        }
        return addrlist;
    }
}
cs

 

 

 

NotFoundException, vo (Customer, Post)

NotFoundException

1
2
3
4
5
6
7
8
9
10
11
12
13
package my.exception;
 
public class NotFoundException extends Exception{
 
    // 예외 전송용 에러 클래스
    public NotFoundException() {
        super();
    }
 
    public NotFoundException(String message) {
        super(message);
    }
}
cs

Customer

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package my.vo;
 
public class Customer {
    // 고객에 대한 정보가 담겨있다
    // 오라클의 customer table의 한행의 자료를 표현하기위해 
    // JVM에서 일할 클래스를 만든다
    private String id;
    private String pwd;
    private String name;
    private String buildingno;
    // 객체와 객체사이에서도 관계를 맺을 필요가 있다
    // 현재 customer table과  post table 과 일대다 관계이므로 이를 표현할 필요가 있다
    // 다시 말해 테이블간의 관계가 있다면 클래스간의 관계로 표현해줘야 한다
    private Post post;
    // has a 관계
    private String addr;
    // is a 관계
    private int status;
    // 기본생성자
    public Customer() {
        super();
    }
    
    // 모든 인스턴스 변수 초기화 생성자
    public Customer(String id, String pwd, String name, String buildingno, Post post, String addr, int status) {
        super();
        this.id = id;
        this.pwd = pwd;
        this.name = name;
        this.buildingno = buildingno;
        this.post = post;
        this.addr = addr;
        this.status = status;
    }
    
    // Setter & Getter
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getBuildingno() {
        return buildingno;
    }
    public void setBuildingno(String buildingno) {
        this.buildingno = buildingno;
    }
    public Post getPost() {
        return post;
    }
    public void setPost(Post post) {
        this.post = post;
    }
    public String getAddr() {
        return addr;
    }
    public void setAddr(String addr) {
        this.addr = addr;
    }
    public int getStatus() {
        return status;
    }
    public void setStatus(int status) {
        this.status = status;
    }
}
cs

Post

package my.vo;

public class Post {
	// Post 테이블의 자료를 JVM 자료로 만든다
	private String zipcode;
	private String sido;
	private String sidoe;
	private String sigungu;
	private String sigungue;
	private String eupmyun;
	private String eupmyune;
	private String dorocode;
	private String doro;
	private String doroe;
	private String jiha;
	private String building1;
	private String building2;
	private String buildingno;
	private String daryang;
	private String building;
	private String dongcode;
	private String dong;
	private String ri;
	private String dongadmin;
	private String san;
	private String zibun1;
	private String zibunserial;
	private String zibun2;
	private String zipoldcode;
	private String zipcodeserial;

	// 기본 생성자
	public Post() {
		super();
	}

	// 모든 매개변수 생성자
	public Post(String zipcode, String sido, String sidoe, String sigungu, String sigungue, String eupmyun,
			String eupmyune, String dorocode, String doro, String doroe, String jiha, String building1,
			String building2, String buildingno, String daryang, String building, String dongcode, String dong,
			String ri, String dongadmin, String san, String zibun1, String zibunserial, String zibun2,
			String zipoldcode, String zipcodeserial) {
		super();
		this.zipcode = zipcode;
		this.sido = sido;
		this.sidoe = sidoe;
		this.sigungu = sigungu;
		this.sigungue = sigungue;
		this.eupmyun = eupmyun;
		this.eupmyune = eupmyune;
		this.dorocode = dorocode;
		this.doro = doro;
		this.doroe = doroe;
		this.jiha = jiha;
		this.building1 = building1;
		this.building2 = building2;
		this.buildingno = buildingno;
		this.daryang = daryang;
		this.building = building;
		this.dongcode = dongcode;
		this.dong = dong;
		this.ri = ri;
		this.dongadmin = dongadmin;
		this.san = san;
		this.zibun1 = zibun1;
		this.zibunserial = zibunserial;
		this.zibun2 = zibun2;
		this.zipoldcode = zipoldcode;
		this.zipcodeserial = zipcodeserial;
	}

	// Setter & Getter
	public String getZipcode() {
		return zipcode;
	}

	public void setZipcode(String zipcode) {
		this.zipcode = zipcode;
	}

	public String getSido() {
		return sido;
	}

	public void setSido(String sido) {
		this.sido = sido;
	}

	public String getSidoe() {
		return sidoe;
	}

	public void setSidoe(String sidoe) {
		this.sidoe = sidoe;
	}

	public String getSigungu() {
		return sigungu;
	}

	public void setSigungu(String sigungu) {
		this.sigungu = sigungu;
	}

	public String getSigungue() {
		return sigungue;
	}

	public void setSigungue(String sigungue) {
		this.sigungue = sigungue;
	}

	public String getEupmyun() {
		return eupmyun;
	}

	public void setEupmyun(String eupmyun) {
		this.eupmyun = eupmyun;
	}

	public String getEupmyune() {
		return eupmyune;
	}

	public void setEupmyune(String eupmyune) {
		this.eupmyune = eupmyune;
	}

	public String getDorocode() {
		return dorocode;
	}

	public void setDorocode(String dorocode) {
		this.dorocode = dorocode;
	}

	public String getDoro() {
		return doro;
	}

	public void setDoro(String doro) {
		this.doro = doro;
	}

	public String getDoroe() {
		return doroe;
	}

	public void setDoroe(String doroe) {
		this.doroe = doroe;
	}

	public String getJiha() {
		return jiha;
	}

	public void setJiha(String jiha) {
		this.jiha = jiha;
	}

	public String getBuilding1() {
		return building1;
	}

	public void setBuilding1(String building1) {
		this.building1 = building1;
	}

	public String getBuilding2() {
		return building2;
	}

	public void setBuilding2(String building2) {
		this.building2 = building2;
	}

	public String getBuildingno() {
		return buildingno;
	}

	public void setBuildingno(String buildingno) {
		this.buildingno = buildingno;
	}

	public String getDaryang() {
		return daryang;
	}

	public void setDaryang(String daryang) {
		this.daryang = daryang;
	}

	public String getBuilding() {
		return building;
	}

	public void setBuilding(String building) {
		this.building = building;
	}

	public String getDongcode() {
		return dongcode;
	}

	public void setDongcode(String dongcode) {
		this.dongcode = dongcode;
	}

	public String getDong() {
		return dong;
	}

	public void setDong(String dong) {
		this.dong = dong;
	}

	public String getRi() {
		return ri;
	}

	public void setRi(String ri) {
		this.ri = ri;
	}

	public String getDongadmin() {
		return dongadmin;
	}

	public void setDongadmin(String dongadmin) {
		this.dongadmin = dongadmin;
	}

	public String getSan() {
		return san;
	}

	public void setSan(String san) {
		this.san = san;
	}

	public String getZibun1() {
		return zibun1;
	}

	public void setZibun1(String zibun1) {
		this.zibun1 = zibun1;
	}

	public String getZibunserial() {
		return zibunserial;
	}

	public void setZibunserial(String zibunserial) {
		this.zibunserial = zibunserial;
	}

	public String getZibun2() {
		return zibun2;
	}

	public void setZibun2(String zibun2) {
		this.zibun2 = zibun2;
	}

	public String getZipoldcode() {
		return zipoldcode;
	}

	public void setZipoldcode(String zipoldcode) {
		this.zipoldcode = zipoldcode;
	}

	public String getZipcodeserial() {
		return zipcodeserial;
	}

	public void setZipcodeserial(String zipcodeserial) {
		this.zipcodeserial = zipcodeserial;
	}
}

 

HomeEx1.war
4.10MB

 

오늘은 여기까지입니다 감사합니다 !

 

안녕들 하시죠!

이번 시간에도 '사내 DB테이블'을 이용한 문제풀이를 통해 ORACLE SQL 쿼리문을 복습해보겠습니다.

 

언어 및 툴

ORACLE DATABASE, SQLDEVELOPER

 

테이블 생성 참고

2019/09/28 - [Database] - ORACLE SQL 쿼리 복습을 위한 '사내 DB테이블' 세팅

 

쿼리 실행 순서

5 SELECT 
1 FROM 
2 WHERE
3 GROUP BY
4 HAVING
6 ORDER BY

 

문제

1. 직책이 SALESMAN, ANALYST인 사람의 모든 정보를 출력하시오. ( or, like, in, any, some )
1
2
3
4
select *
from emp
where job = 'SALESMAN' 
or job = 'ANALYST';
cs
 
1
2
3
4
select *
from emp
where job like 'S%' 
or job like 'A%';
cs

 

1
2
3
4
5
6
7
8
9
10
11
select *
from emp
where job in ('SALESMAN''ANALYST');
 
select *
from emp
where job = any ('SALESMAN''ANALYST');
 
select *
from emp
where job = some ('SALESMAN''ANALYST');
cs

 

2. 1981년 5월 1일 ~ 1982년 2월 사이에 입사한 사원들의 모든 정보를 부서번호순(오름차순)으로 검색하시오. ( TO_DATE )
1
2
3
4
5
select *
from emp
where hiredate >= TO_DATE('19810501''yyyymmdd'
and hiredate < TO_DATE('19820228''yyyymmdd')
order by deptno;
cs

 

3. 1981년에 입사한 사원의 이름과 사원번호를 출력하는데 사원번호가 내림차순으로 정렬하시오. ( TO_CHAR )
1
2
3
4
5
6
select ename
     , empno
from emp
where hiredate >= '19810101'
and hiredate <= '19811231'
order by empno desc;
cs
1
2
3
4
5
select ename
     , empno
from emp
where to_char(hiredate,'YYYY'= '1981'
order by empno desc;
cs

 

4. 직급이 SALESMAN 일 경우 급여 * 1.1, CLERK 일 경우 급여 * 1.3, MANAGER 일 경우 급여 * 1.5 를 하고 모든 정보를 출력하시오. ( DECODE )

DECODE 함수 = ( IF-ELSE )

ex) DECODE(컬럼, 조건1, 결과1, 조건2, 결과2....)

1
2
3
4
5
6
7
select empno
     , job
     , ename
     , sal
     , decode(job, 'SALESMAN', sal*1.1'CLERK', sal*1.3'MANAGER', sal*1.5, sal) as 인상된급여 
from emp;
 
cs

 

 

 

 

 

 

 

5. 모든 사원들에게 커미션을 200씩 추가하여 사원이름, 커미션 값을 출력하시오. ( nvl )

NVL 함수 = 값이 NULL인 경우 지정값을 출력한다. NVL("값", "지정값")

NVL2 함수 = 값이 NULL이 아닌 경우 지정값1을 출력하고 NULL인 경우 지정값2를 출력한다. NVL2("값", "지정값1", "지정값2")

1
2
3
select ename
     , nvl(comm,0+ 200 
from emp;
cs

 

6.  커미션을 가지고 있는 사원은 Y, 커미션이 NULL값인 사원은 N을 포함하여 사원이름과 커미션 값을 출력하시오.( nvl2 )
1
2
3
select ename
     , nvl2(comm, 'Y''N'
from emp;
cs

 

7. 1981년 입사자들의 평균 임금을 출력하시오.
1
2
3
select AVG(sal)
from emp
where TO_CHAR(hiredate,'YYYY'= '1981';
cs

 

8. 사원번호, 사원이름, 총 급여(SAL+COMM)을 출력하시오. 
1
2
3
4
select empno
     , ename
     , sal+nvl(comm,0)
from emp;
cs

 

9. SALESMAN 의 커미션 평균을 출력하시오. ( group by )

 

GROUP BY 함수 = 특정 컬럼을 기준으로 집계를 내는데에 사용한다.

SELECT [그룹으로 묶은 컬럼명]
     , [집계할 컬럼명]
FROM [테이블명]
GROUP BY [그룹으로 묶을 컬럼명]
1
2
3
4
5
select job
     , AVG(nvl(comm,0))
from emp
where job='SALESMAN'
group by job;
cs

 

오늘은 여기까지입니다 감사합니다 !

 

안녕들 하시죠!

이번 시간부터 '사내 DB테이블'을 이용한 문제풀이를 통해 ORACLE SQL 쿼리문을 기초부터 복습할 생각입니다.

 

언어 및 툴

ORACLE DATABASE, SQLDEVELOPER

 

테이블 생성 참고

2019/09/28 - [Database] - ORACLE SQL 쿼리 복습을 위한 '사내 DB테이블' 세팅

 

쿼리 실행 순서

5 SELECT 
1 FROM 
2 WHERE
3 GROUP BY
4 HAVING
6 ORDER BY

 

문제

1.  부서번호 10번인 사원들의 사원번호, 사원이름, 월급을 출력하시오.
1
2
3
select empno, ename, sal
from emp
where deptno=10;
cs

 

2.  사원번호 7369인 사원 이름, 입사일, 부서번호를 출력하시오.
1
2
3
select ename as 사원이름, hiredate as 입사일, deptno as 부서번호
from emp
where empno=7369;
cs

 

3. 사원번호 7300크고 7400 작은 사원 이름, 입사일, 부서번호를 출력하시오.
1
2
3
select ename as 사원이름, hiredate as 입사일, deptno as 부서번호
from emp
where empno > 7300 AND empno < 7400;
cs

 

 

4.  EMP 모든 정보를 (사원번호 기준 내림차순으로) 검색하시오.

정렬
ASC - 오름차순 ( DEFAULT값 )
DESC - 내림차순

1
2
3
select *
from emp
order by empno desc;
cs

 

5. 이름이 S로 시작하는 모든 사람의 사원번호와 이름을 출력하시오.
1
2
3
select *
from emp
order by empno desc;
cs

 

6. 직속상관 사원번호가 없는 사원의 모든 정보를 검색하시오.
1
2
3
select *
from emp
where mgr is null;
cs

 

오늘은 여기까지입니다 감사합니다 !

 

안녕들 하시죠!

이번시간에는 뒤돌아서면 까먹는 SQL 쿼리 복습을 위한 테이블 세팅을 진행해보겠습니다.

 

 
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
34
35
36
37
38
39
40
41
42
43
44
45
46
CREATE TABLE DEPT( -- 부서테이블
    DEPTNO NUMBER(2CONSTRAINT pk_dept PRIMARY KEY-- 부서번호
    DNAME VARCHAR2(14), -- 부서이름
    LOC VARCHAR2(13-- 부서위치
);
INSERT INTO DEPT VALUES (10,'ACCOUNTING''NEW YORK');
INSERT INTO DEPT VALUES (20'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40'OPERATIONS''BOSTON');
CREATE TABLE EMP( -- 사원테이블
    EMPNO NUMBER(4CONSTRAINT pk_emp PRIMARY KEY-- 사원번호
    ENAME VARCHAR2(10), -- 사원이름
    JOB VARCHAR2(9), -- 직급
    MGR NUMBER(4), -- 직속상사 사원번호
    HIREDATE DATE, -- 입사날짜
    SAL NUMBER(7,2), -- 사원급여
    COMM NUMBER(7,2), -- 보너스(커미션)
    DEPTNO NUMBER(2-- 부서번호
);
INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',null,TO_DATE('1981-11-17','yyyy-mm-dd'),5000,null,10);
INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,TO_DATE('1981-04-02','yyyy-mm-dd'),2975,null,20);
INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,TO_DATE('1981-05-01','yyyy-mm-dd'),2850,null,30);
INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,TO_DATE('1981-06-09','yyyy-mm-dd'),2450,null,10);
INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,TO_DATE('1987-04-19','yyyy-mm-dd'),3000,null,20);
INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,TO_DATE('1981-12-03','yyyy-mm-dd'),3000,null,20);
INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,TO_DATE('1981-02-20','yyyy-mm-dd'),1600,300,30);
INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,TO_DATE('1981-02-22','yyyy-mm-dd'),1250,500,30);
INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,TO_DATE('1981-09-28','yyyy-mm-dd'),1250,1400,30);
INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,TO_DATE('1981-09-08','yyyy-mm-dd'),1500,null,30);
INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,TO_DATE('1981-12-03','yyyy-mm-dd'),950,null,30);
INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,TO_DATE('1982-01-23','yyyy-mm-dd'),1300,null,10);
INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,TO_DATE('1980-12-17','yyyy-mm-dd'),800,null,20);
INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,TO_DATE('1987-05-23','yyyy-mm-dd'),1100,null,20);
COMMIT;
CREATE TABLE salgrade( -- 급여테이블
    grade number(7,2), -- 급여등급
    losal number(7,2), -- 최저급여
    hisal number(7,2-- 최고급여
);
INSERT INTO salgrade values(1,700,1200);
INSERT INTO salgrade values(2,1201,1400);
INSERT INTO salgrade values(3,1401,2000);
INSERT INTO salgrade values(4,2001,3000);
INSERT INTO salgrade values(5,3001,9999);
 
COMMIT;
cs

 

 

안녕들 하시죠!

이번시간에는 기초 알고리즘 단골 문제인 입력받은 숫자 n까지의 소수갯수 구하기를 Java언어로 풀어보겠습니다.

 

문제

1부터 입력받은 숫자 n까지의 소수의 갯수를 구해라. 

 

풀이

입력받은 숫자까지의 모든 숫자를 나누기 연산을 통해 비교한다.

 

입력받은 n이 5라면, 2부터 시작해서 일일이 나누어본다.

2%2 , 3%2, 3%3, 4%2, 4%3, 4%4, 5%2, 5%3 ...

 

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
import java.util.Scanner;
 
public class Test1 {
 
    public static int getCount(int n) { // 입력받은 숫자까지의 소수를 계산하는 메소드
        int total = 0;
        int num = 2;
        
        while (num <= n) {
            for (int i = 2; i <= num; i++) {
                if (num % i == 0 && i != num) { // 입력받은 숫자 이외에 다른 숫자로 나누어 떨어질 경우 ( 소수가 아님 ) break
                    break;
                }
                if (num % i ==0 && i == num) { // for문의 i가 증가해 본인과 같아져 나누어 떨어질 경우 ( 소수 )
                    total++// 소수의 갯수를 count하는 total 증가
                }
            }
            num++;
        }
        return total;
    }
 
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int result = getCount(n);
        System.out.println(result);
    }
}
cs

 

문제점

 

숫자가 커지면 커질수록 일일이 비교하는 것은 효율성이 떨어집니다.

100000 정도의 숫자만 입력해도 계산시간이 꽤나 걸립니다.

아래에서 시간복잡도를 통한 비교를 해보겠습니다.

 

시간복잡도
1
2
3
4
5
6
7
8
9
10
11
12
 
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
 
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int result = getCount(n);
        System.out.println(result);
 
        long end = System.currentTimeMillis();
        System.out.println("수행시간 : " + (end - start)/1000.0);
    }
cs

 

 

 

에라토스테네스의 체 알고리즘

 

고대 그리스 수학자 에라토스테네스가 발견한 제곱근을 이용한 소수를 구하는 방법.

소수를 구하는 최적의 알고리즘이라고 합니다.

 

소수는 n의 배수가 아니고 입력받은 수를 그 수보다 작은 수들로 나누어서 떨어지면 소수가 아니다.

그러므로, 모두 나누어 볼 필요없이 n 제곱근 까지만 나누어서 떨어지면 소수가 아니다.

 

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
34
35
36
37
38
39
40
41
import java.util.Scanner;
 
public class Test1 {
 
    public static int getCount(int n) { // 입력받은 숫자까지의 소수를 계산하는 메소드
        int[] arr = new int[n + 1];
        int c = 0;
        for (int i = 2; i <= n; i++) { // 입력받은 숫자까지의 모든 숫자들을 배열에 초기화한다.
            arr[i] = i;
        }
 
        int Sqrt = (int) Math.sqrt(n);
        for (int i = 2; i <= Sqrt; i++) { // 제곱근 까지만 계산
            if (arr[i] == 0) { // 0으로 초기화 되어있는 숫자들은 건너뛴다.
                continue;
            }
            for (int j = i + i; j <= n; j += i) { // 현재 숫자(i)를 제외한 제곱수들은 모두 0으로 초기화.
                arr[j] = 0// 0이 들어있는 번지는 소수가 아니다.
            }
        }
        for (int i = 2; i <= n; i++) {
            if (arr[i] != 0) {
                c++;
            }
        }
        return c;
 
    }
 
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
 
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int result = getCount(n);
        System.out.println("개수 : " + result);
 
        long end = System.currentTimeMillis();
        System.out.println("수행시간 : " + (end - start) / 1000.0);
    }
}
cs

 

수행시간   

 

오늘은 여기까지입니다 감사합니다.

'알고리즘' 카테고리의 다른 글

Java) 입력받은 숫자 n까지의 소수갯수 구하기 + 최적 알고리즘  (0) 2019.09.27
Java 원형큐 구현  (0) 2019.06.23
Java 링크드리스트 구현  (0) 2019.06.22
백준 10828번 (스택)  (0) 2019.05.10
백준 2750번 (버블정렬)  (0) 2019.05.01
백준 1000번  (0) 2019.04.16

+ Recent posts