문제

 

https://www.acmicpc.net/problem/9498

 

시험 점수를 입력받아 90 ~ 100점은 A,

80 ~ 89점은 B,

70 ~ 79점은 C,

60 ~ 69점은 D,

나머지 점수는 F를 출력하는 프로그램을 작성하시오.

 

import java.util.*;

public class Main{
    public static void main(String[] args){
                    Scanner sc = new Scanner(System.in);
                    int a;
                    a= sc.nextInt();
                    
                    if(a>=90) {
                    	System.out.println("A");
                    }else if( 80 <= a && a <=89 ) {
                    	System.out.println("B");
                    }else if( 70 <= a && a <=79 ) {
                    	System.out.println("C");
                    }else if( 60 <= a && a <=69 ) {
                    	System.out.println("D");
                    }else{
                    	System.out.println("F");
                    
                    }
    }
}

'개인공부 > 백준코딩연습' 카테고리의 다른 글

[조건문] - 알람 시계  (0) 2024.08.11
[조건문] - 사분면 고르기  (0) 2024.08.11
[조건문] - 윤년  (0) 2024.08.11
[조건문] - 두 수 비교하기  (0) 2024.08.11
[입출력과 사칙연산] 1~13 모음  (0) 2024.08.11

 

문제

https://www.acmicpc.net/problem/1330

 

두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

 

 

import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        
        Long a,b;
        a = Long.parseLong(st.nextToken());
        b = Long.parseLong(st.nextToken());
        
                    if(a>b) {
                    	System.out.println(">");
                    }else if(a<b) {
                    	System.out.println("<");
                    }else if(a.equals(b)) {
                    	System.out.println("==");
                    }
        
    }
}

 

 

> StringTokenizer 사용하기 시작 함

> BufferedReader 사용하기 시작 함

 

 

'개인공부 > 백준코딩연습' 카테고리의 다른 글

[조건문] - 알람 시계  (0) 2024.08.11
[조건문] - 사분면 고르기  (0) 2024.08.11
[조건문] - 윤년  (0) 2024.08.11
[조건문] - 시험 성적  (0) 2024.08.11
[입출력과 사칙연산] 1~13 모음  (0) 2024.08.11

문제

https://www.acmicpc.net/step/1

 

 

1. Hello World

public class Main{
    public static void main(String[] args){
        System.out.print("Hello World!");
    }
}

 

 

ps. 이거 처음에 어떻게 해야 하는 지 몰라서

"내가 헬로월드도 출력 못하다니 ....!"

하며 좌절했던 문제

 

 

2. A+B

import java.util.Scanner;

public class Main{
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int a,b;
        a= sc.nextInt();
        b= sc.nextInt();
        int c = a+b ;  
        System.out.println(c);
    }

}

 

 

3. A-B

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int a,b;
        a= sc.nextInt();
        b= sc.nextInt();
        int c= a-b;
        System.out.print(c);
        
    }
    
}

 

 

4. A×B

import java.util.Scanner;


public class Main{

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
            int a,b,c;
            a= sc.nextInt();
            b= sc.nextInt();
            c = a*b;
            System.out.println(c);
        
    }
}

 

 

5. A/B

import java.util.Scanner;

public class Main{
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
                    double a,b,c;
                    
                    a = sc.nextInt();
                    b = sc.nextInt();                 
                    c= a/b;
                    
                   System.out.println(c);
        
   
    }
}

 

 

6. 사칙연산

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args){
                          Scanner sc = new Scanner(System.in);
                    int a,b,c,e,f,g,h,i;
                    
                    a = sc.nextInt();
                    b = sc.nextInt();
                    
                    e= a+b;
                    f= a-b;
                    g= a*b;
                    h= a/b;
                    i= a%b;
                    
                    System.out.println(e);
                    System.out.println(f);
                    System.out.println(g);
                    System.out.println(h);
                    System.out.println(i);
    }
    
}

 

7. ??!

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String a ;
        a= sc.next();
        if(a.equals(a)) System.out.println(a+"??!");
        sc.close();
    }
    
}

 

 

8. 1998년생인 내가 태국에서는 2541년생?!

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in); 
        int a,b;
        a = sc.nextInt();
        b= a-543;
        System.out.println(b);
        sc.close();
        
    }
    
}

 

 

9. 나머지

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int a,b,c,d,e,f,g;
        a=sc.nextInt();
        b=sc.nextInt();
        c=sc.nextInt();
      
         d=(a+b)%c;
         e=((a%c)+(b%c))%c;
         f=(a*b)%c;
         g=((a%c)*(b%c))%c;        

          System.out.println(d);
          System.out.println(e);
          System.out.println(f);
          System.out.println(g);
                    sc.close();        
        
    }
}

 

 

10. 곱셈

import java.util.*;

public class Main{
    public static void main(String[] args){
               Scanner sc = new Scanner(System.in);
                    int a,b,c,d,e,f,g,h;
                    
                    a= sc.nextInt();
                    b= sc.nextInt();
                    c=  b/100;
                    d= (b-(c*100))/10;
                    e= (b-(c*100)-(d*10));
                    
                    f= a*e;
                    g= a*d;
                    h= a*c;
                    
                    System.out.println(f);
                    System.out.println(g);
                    System.out.println(h);
                    System.out.println(a*b);
                    
                    sc.close();
    }
}

 

 

11. 꼬마 정민

import java.util.*;

public class Main{
    public static void main(String[] args){
        
                    Scanner sc = new Scanner(System.in);
                    long a,b,c;
                    a= sc.nextLong();
                    b= sc.nextLong();
                    c= sc.nextLong();
                    
                    System.out.println(a+b+c);
                    
    }
    
}

 

 

12.  고양이

public class Main{
    public static void main(String[] args){
                System.out.println("\\    /\\");
                System.out.println(" )  ( ')");
                System.out.println("(  /  )");
                System.out.println(" \\(__)|");
                
    }
}

 

 

13. 개

public class Main{
    public static void main(String[] args){
                System.out.println("|\\_/|");
                System.out.println("|q p|   /}");
                System.out.println("( 0 )\"\"\"\\");
                System.out.println("|\"^\"`    |");
                System.out.println("||_/=\\\\__|");        
    }
}

 

 

'개인공부 > 백준코딩연습' 카테고리의 다른 글

[조건문] - 알람 시계  (0) 2024.08.11
[조건문] - 사분면 고르기  (0) 2024.08.11
[조건문] - 윤년  (0) 2024.08.11
[조건문] - 시험 성적  (0) 2024.08.11
[조건문] - 두 수 비교하기  (0) 2024.08.11

작동시간 얼마나 걸리는지 알아야할  경우가 생기는군

 

해당  http페이지 띄워서

개발자 도구 띄우고

network -> 기능실행 완료 > 작동하는 메소드로 검색 > all 체크

시간 나온다!!

 

 

첫 번째 혼자 맡은 업무로

Thread를 이용하여 오류로그발생 시 관리자에게 알림메일을 발송하는 일을 맡았다

그 전에 아~~주 초창기 때 배웠던 thread개념을 먼저 정리해야 한다고 하셔서

다시 예전 소스를 뒤져보았다

그 때는 이해되지 않았던 소스들을 다시보니 이제야 조금 알 것 같다.

되게 신기하고 재밌다

아무튼 얼른 정리하고 일찍 자야지

 


우선먼저 Thread란 

하나의 프로세스 안에서 실행되는 명령 흐름, 하나의 프로그램이다. 쉽게 말하면 하나의 메소드라고 생각!!

멀티스레드라는 개념도 나오는데 

이것도 쉽게 말해 하나의 프로세스 안에서 여러 개의 스레드가(메소드가) 동시에 작업하는 것이라고 할 수 있다.

java시간에 그렇게 main메서드안에다가 구현하는 소스를 만들었는데  요 하나의 main 스레드를 가진 자바프로그램을 반대로 단일스레드라고 하는 것 임

 

Thread를 만드는 방법 (총 2가지)

-java.lang.Thread 클래스를 상속받아 구현
-java.lang.Runnable 인터페이스를 상속받아 구현 (자바에서 상속은 1번만 가능하니까 이를 보안하기 위해)

 

 

Thread 구현 예

class YesThread extends Thread{
	
	//인자 생성자:매개변수(인자)로 스레드명으로 사용할 문자열을 받는다
	public YesThread(String threadName) {
		super(threadName);		
	}/////////////////////
	
	void threadMethod() {
		// 아래 로직이 시간이 오래 걸리는 작업이라고 가정
		for(int i=1;i<=10;i++) {
			System.out.println(String.format("%s]i=%d",getName(),i));
			try {
				
				//sleep(천분의 1초);
				//스레드를 1000분 1초동안 wait상태로 빠지게 하는 메소드.
			    //1000분 1초후에는 다시 Runnable상태로 자동으로 돌아감.
				sleep(1000);
			} 
			catch (InterruptedException e) {e.printStackTrace();}
			
		}
	}//////////////////	
	/*2]run()메소드 오버라이딩
	  -run()메소드안에 시간이 오래 걸리는 작업 기술
	  -개발자가 직접 호출 못하고 스레드가
	   Running상태로 들어갔을때 자동으로 호출되는 메소드(콜백 메소드)
	*/
	@Override
	public void run() {
		threadMethod();
	}////////////////////////

mian

public class ThreadApp {

	public static void main(String[] args) throws InterruptedException {
		System.out.println("main스레드 시작");
		
		YesThread yt1= new YesThread("1st 스레드");
		YesThread yt2= new YesThread("2nd 스레드");
		yt1.setName("첫번째 스레드");//메소드로 스레드명 설정	
		yt1.start();//스레드를 Runnable상태로 전이시킴.run()메소드안의 코드가 실행되는 것은 아님
		
     	/*
		 -join() 메소드
		  1]start()호출후에 join()메소드를 호출해야 한다
		  2]join()메소드를 호출한 스레드가 
		    다 실행이 끝나야 다른 스레드가 동작한다.
		*/
		//yt1.join();
        
        /*스레드의 우선권 설정
		우선순위가 높다고 그 스레드가
		먼저 실행된다는 보장은 없다.(확률만 높을뿐)
        */
		yt2.setPriority(Thread.MAX_PRIORITY);
		yt2.start();
	}
}

이러면 

첫번째 스레드]i=1
2nd 스레드]i=1

요 두개가 랜덤순위로 1~10 까지 찍힘

 

*** 종속 thread개념 추가

독립 스레드(Non Daemon 스레드): 메인스레드와 working스레드(개발자가 만든 스레드) 메인스레드가 끝나도 종료되지 않고 스레드가 Dead상태 될 때까지 계속 실행되는 스레드
종속 스레드(Daemon 스레드): 모든 독립스레드가 끝나면 자동으로 종료(Dead)가 되는 스레드
-주 스레드의 보조역할을 하는 스레드
-종속 스레드는 주로 무한루프로 구성한다.
-ex]배경음악,10분마다 자동 저장 등등..
어떤 스레드를 종속 스레드로 만들려면 setDaemon(true)로 설정한다.

종속스레드 예

class DaemonThread extends Thread{  //thread상속
	//run메소드 오버라이딩
	@Override
	public void run() {
		while(true) {
			System.out.println(String.format("%s]배경 음악이 흘려요",getName()));
			System.out.println(String.format("%s]3초마다 저장",getName()));
			try {
				sleep(3000);
			} 
			catch (InterruptedException e) {e.printStackTrace();}
		}
	}
}///////////

main

public class ThreadApp {

	public static void main(String[] args) throws InterruptedException {
    	System.out.println("main 스레드 시작"); 
        
        YesThread yt1 = new YesThread("1st 스레드");  //메인스레드가 있어야 종속스레드도 존재하는거
        yt1.setName("첫번째 스레드");  	
		yt1.start();
        
		DaemonThread daeThread = new DaemonThread();
		daeThread.setName("데몬 스레드");
		daeThread.setDaemon(true); //종속 스레드 설정
		daeThread.start();	
		System.out.println("main스레드 끝");
        
    }
}

이러면

main 스레드 시작

첫번째 스레드]i=1

    <--- 요게 10개 다 찍히고

main 스레드 끝

데몬스레드 ]배경 음악이 흘러요

데몬 스레드]3초마다 저장

끝나야 데몬스레드가 찍힘

 


Runnable인터페이스를 상속받을 땐

class Solidier{
	void longedMethod() {
		for(int i=1;i<=10;i++) {
			System.out.println(String.format("스레드명:%s,i=%d",Thread.currentThread().getName(),i));
			try {				
				Thread.sleep(1000);
			} 
			catch (InterruptedException e) {e.printStackTrace();}			
		}
	}
}
//1.Runnable인터페이스 상속
class Commander extends Solidier implements Runnable{
	//2.run()오버라이딩
	@Override
	public void run() {
		longedMethod();		
	}
}

main

public class RunnableApp {
	public static void main(String[] args) {
		Commander commander = new Commander();
		System.out.println(commander instanceof Commander);
		System.out.println(commander instanceof Solidier);
		System.out.println(commander instanceof Runnable);
		//System.out.println(commander instanceof Thread);//스레드상속이 아님!!
		
        //Runnable타입을 Thread클래스의 인자 생성자를 이용해서 Thread타입으로 변환
		Thread th1 = new Thread(commander);
		th1.setName("첫번째 스레드");
		th1.start();
		Thread th2 = new Thread(commander, "두번째 스레드");
		th2.start();
		
	}
}

 

 


Thread 중지시키기

interrupt()메소드를 이용한다! 

class ThreadStop extends Thread{	
	@Override
	public void run() {

		/*interrupt()메소드 호출-InterruptedException예외 발생시키기위해서]
		  스레드 작업중간에 멈출 수 있다
		  InterruptedException이 발생하면 무조건 catch절로 들어가니까
        */
		int i=1;
		try {   //while밖으로 catch절을 뺀다
			while(true) {
				System.out.println("i="+ i++);
				sleep(1000);						
			}
		}
		catch (InterruptedException e) {System.out.println("interrupt()호출");}
		finally {
			System.out.println("스레드 중지(Dead상태)");
		}
	}
}

main

public class ThreadStopApp {
	public static void main(String[] args) {
		ThreadStop thread = new ThreadStop();
		thread.start();		
		try {
			Thread.sleep(5000);
		} 
		catch (InterruptedException e) {e.printStackTrace();}    
		if(thread.isAlive()) thread.interrupt();  // 요렇게 종료시킴
	}
}

동기화(synchronized)

공유 메모리를 여러 스레드가 동시에 사용하지 못하도록 하는 것(lock을 건다)

 즉 코드의 한부분, 또는 동기화된 메소드가 다른 스레드와 동시에 수행될  수 없게 하는 것.

이건 .... 중점이 아니니 걍 가볍게 넘어가쟈

 

 

'업무중필요모음 > 업무복습(틈틈히복습)' 카테고리의 다른 글

서버 걸리는 시간보기  (0) 2023.03.28
4일차 테스트서버 구동 & 전체서비스 확인  (0) 2023.03.16
환경서버관련  (0) 2023.03.15
JPA 쿼리 메소드 정리  (0) 2023.03.15
시큐리티  (0) 2023.03.15

window+shift+s : 캡쳐하기

window+v : 클립보드 (복사한거 다보기)

 

이것도 쓰는 거 계속 추가 할 거

'업무중필요모음 > 필요단축키' 카테고리의 다른 글

VS코드(이클립스도 비슷)  (0) 2023.03.15

ctrl+shift+f : 소스 자동정렬

ctrl+e : 파일찾기

ctrl + shift + f : 전체검색

ctrl + s  : 저장

(Ctrl + Shift + P) , Reload 검색 ,실행  : 재시작 하기 

 

f5 구현하기

 

디버깅

f10 : 다음줄 실행

f11 : 구현메소드로 들어가기

f5  : .class파일만 실행

 

 

 

계속 걍 추가할 것!

'업무중필요모음 > 필요단축키' 카테고리의 다른 글

윈도 단축키  (0) 2023.03.16

SFTP 와 SSH

 

SSH(Secure SHell)은 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜

보안을 강호해서 만들어짐, 암호화 기법을 사용하기 때문에 통신이 노출된다고 하더라도 암호화된 문자로 보임

 

SFTP는 네트워크를 통한 파일 전송을 허용하는 SSH 프로토콜의 확장이라고 봄

SSH 방식을 사용해서 안전하게 암호화된 구간에서 파일을 전송할 수 있도록 구현한 것

요거 사용시 ****명령어가 다를 수 있기 때문에 항상 os 버전을 확인 해야 한다고 함 !!***

 

회사에서는 배포할 때

putty 라는 프로그램을이용하는데 이게 ssh를 사용했...던거 같음

지금은 정확히 모르겠지만 서버배포할 때? 였나 아무튼 순서가 있다는 것만 먼저 알아두자

나중에 정리 다시 할,. 일이 있겠찌

rootpath()  - > webServer -> dev.회사이름

 

빌드된 파일 배포

buil  > libs > zip파일압축풀기 (.class모아둔디렉, static 디렉 ,template 즉 html모아둔 디렉 3개만 필요함)

 

***로그보기**

요거도 잘 이해는 아직 안되지만 순서만 알아 놓자

톰켓디렉 > log디렉 > 카탈리나.out 

 

 

'업무중필요모음 > 업무복습(틈틈히복습)' 카테고리의 다른 글

Thread 사용 전 복습 겸 정리  (0) 2023.03.27
4일차 테스트서버 구동 & 전체서비스 확인  (0) 2023.03.16
JPA 쿼리 메소드 정리  (0) 2023.03.15
시큐리티  (0) 2023.03.15
Thymeleaf  (0) 2023.03.14

기존에 Spring 메이븐에서 사용했던 것과 다르게

쿼리문을 직접 안써도 됨!! 

왕왕 신기

대신 어려우니 잘 익혀야 함.

 

 Spring Data JAP는 CRUD 기능을 공통으로 처리하는 인터페이스를 제공

이를 JPA 공통 인터페이스라고 함 걍 JAP랑은 조금 다른거 같다

 

JpaRepository 인터페이스를 상속 받으면

다음과 같은 기능들이 존재한다.

findAll() : 해당 엔티티 테이블에 있는 모든 데이터를 조회(select)

save() : 대상 엔티티 DB에 저장(insert)

saveAll() : Iterable한 객체 저장(insertall)

delete() : 데이터베이스에서 대상 엔티티 삭제

이외도 기능이 많음


 

***JPA 쿼리 메소드***

메서드 이름으로 내가 원하는 기능을 수행할 쿼리가 자동으로 생성되게 할 수 있다. 이게 짱신기함 !!

쿼리 메서드 기능은 Spring Data JPA 에서 정해놓은 이름을 쓰면  JPA가 해당 메서드 이름으로 분석해 적절한 JPQL 을 구성한다.

 

 

JAP 기본 어노테이션

jap는 객체와 테이블을 매핑하는 프레임워크

객체와 테이블을 정확하게 매핑하는게 중요!(mybatis랑 mybatis.mapper를 매핑하는 것과 같다고 생각하면 쉬움) 

 

** 객체와 테이블 메핑(주로model디렉 안에 있음)

@Entity

@Table

**기본 키 매핑

@id

**필드와 컬럼 매핑

@GeneratedValue  (identity, sequence,table 등등...)

@Column

@Enumerated(EnumType.ORDINAL,EnumType.STRING)

 

**** nativeQuerty사용 시(update의 경우)


    @Modifying
    @Transactional
    @Query(value="update 쿼리문" ,nativeQuery=true )
    void 메소드명(String uid); 

 

저 세개의 어노를 꼭 써야 한다!! 안그럼 에러남

 

update가 아닌경우는 그냥 

    @Query(value="u쿼리문" ,nativeQuery=true )
    void 메소드명(String uid);

쿼리 어노만 사용하면 된다. 

 

@Query는 JpaRepository를 상속하는 인터페이스에서 사용

public interface UserRepository extends JpaRepository<User, Long> {
    @Query("쿼리문")
    List<User> methodName();

요렇게 주로 사용한대

#만약 age가 20살 이상인 사람을 조회한다고 해보면 JPQL은 다음과 같이 사용
Sring jpql = "select u from User u where u.age > 20";

테이블을 대상으로 쿼리를 날리는게 아니라 엔티티를 대상으로 날린다는데 솔직히 이거 뭔소린지 잘 모르겠음

파라미터 바인딩시키기 = 사용자 정의 쿼리 만들기

 

public interface UserRepository extends JpaRepository<User, Long> {
    @Query("쿼리문")
    List<User> methodName();

요게 틀이고 만들면

public interface UserRepository extends JpaRepository<User, Long> {
    @Query("select u from User u where u.username = :name")
    List<User> methodName(@Param("name") String username);

요렇식으로 만든다고 함

 

 

 

나중에 필요하면 더 정리( https://wonit.tistory.com/466 참고자료 )

'업무중필요모음 > 업무복습(틈틈히복습)' 카테고리의 다른 글

4일차 테스트서버 구동 & 전체서비스 확인  (0) 2023.03.16
환경서버관련  (0) 2023.03.15
시큐리티  (0) 2023.03.15
Thymeleaf  (0) 2023.03.14
깃 허브사용 정리  (0) 2023.03.13

+ Recent posts