반응형

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

 

25206번: 너의 평점은

인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치

www.acmicpc.net

 

import java.util.Scanner;
import java.util.HashMap;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        
        HashMap<String,Double> pointMap = new HashMap<String,Double>();
        pointMap.put("A+",4.5);
        pointMap.put("A0",4.0);
        pointMap.put("B+",3.5);
        pointMap.put("B0",3.0);
        pointMap.put("C+",2.5);
        pointMap.put("C0",2.0);
        pointMap.put("D+",1.5);
        pointMap.put("D0",1.0);
        pointMap.put("F",0.0);
        
        int creditSum=0; //이수학점  총합
        Double scoreSum=0.0; //합산점수
        
        while(sc.hasNextLine()){
            String line = sc.nextLine();
            Scanner lineScanner = new Scanner(line);
            //과목명은 패스
            lineScanner.next();
            
            Double credit = Double.parseDouble(lineScanner.next());
            String score =  lineScanner.next();
            
            Double point=0.0;
            
            //P 과목은 패스
            if(!"P".equals(score)){
                point = pointMap.get(score);
                //System.out.println("합산할 점수 : " + point * credit);
                scoreSum += point * credit;
                creditSum += credit;
            }
            
            lineScanner.close();
        }
        
        //System.out.println("이수학점 총합 : " + creditSum);
        //System.out.println("합산 점수 : " + scoreSum);
        if(creditSum == 0){//합산점수가 0인경우 평점 0.0 출력
            System.out.println("0.000000");
        }else{
            System.out.printf("%.6f",scoreSum/creditSum);
        }
        
    }
}

처음에 F인 과목까지 계산에서 제외해버려서 자꾸 틀렸다고 나왔었다..

P인 과목만 제외고 F점수는 포함

문제를 잘 이해해야겠다 ㅠ.,ㅠ

 

* 학습내용

1.  nextLine() : "\n" 개행문자도 입력 받는다.

next()다음에 nextLine()을 하면 개행문자가 들어간다.

hasNextLine도 마찬가지.

 

2. lineScanner() : 한 줄 입력받기. 처음 써봤다.

 

반응형

'코딩 관련 > 코딩문제풀기' 카테고리의 다른 글

[프로그래머스] 숫자 짝꿍  (0) 2024.10.04
[JAVA] 9012번 괄호  (0) 2023.03.13
[JAVA] 그룹 단어 체커  (0) 2023.03.12
[JAVA] 크로아티아 알파벳  (0) 2023.03.11
[JAVA] 직사각형에서 탈출  (0) 2023.03.09
반응형

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

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class MyClass {
    public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      int line = sc.nextInt();
      int cnt = 0 ; //그룹문자 카운트
      sc.nextLine(); //개행문자 때문에 넣음
       
      for(int l =1; l <= line ; l ++ ){
          String str = sc.nextLine();
          List<String> list = new ArrayList<String>();
          
          for(int i =0; i<str.length() ;i++){
              String now = str.substring(i,i+1);
              //리스트에 있는 경우 : 앞에서 문자를 넣었음
              if(list.contains(now)){
                  String before = str.substring(i-1,i);
                  //이미 있는 문자인데 현재문자 바로 앞이 다른 문자인 경우 -> 그룹단어 아님
                  if(!before.equals(now)){
                      break;
                  }
              //리스트에 없는 경우 : 처음 나온 문자
              }else{
                  list.add(now);
              }
              
              //그룹단어 검사 마지막 문자인 경우 -> 그룹단어이므로 카운트 
              if(i+1==str.length()){
                  cnt+=1;
              }
          }
          
      }
      System.out.println(cnt);
    }
}

 

* 학습내용

1. nextInt() : 사용자 입력의 가장 마지막 개행문자(엔터, newline)를 제거하지 않는다.

nextInt() 후에 바로 nextLine()을 사용하면 개행문자를 입력받게 된다.

 

2. charAt()

다음에는 substring말고 charAt을 쓰자

반응형

'코딩 관련 > 코딩문제풀기' 카테고리의 다른 글

[JAVA] 9012번 괄호  (0) 2023.03.13
[JAVA] 너의 평점은  (0) 2023.03.12
[JAVA] 크로아티아 알파벳  (0) 2023.03.11
[JAVA] 직사각형에서 탈출  (0) 2023.03.09
[JAVA] 4344번 평균은 넘겠지 문제  (0) 2023.03.09
반응형

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

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      String str = sc.nextLine();
      
      str = str.replace("dz=","a");
      str = str.replace("lj","a");
      str = str.replace("nj","a");
      str = str.replace("s=","a");
      str = str.replace("z=","a");
      str = str.replace("c=","a");
      str = str.replace("c-","a");
      str = str.replace("d-","a");
      System.out.println(str.length());
    }
}

저 문자조합을 그냥 하나의 문자로 치면 되는 거라..

제일 긴 문자 조합인 dz=부터 대충 a로 바꿔주고 길이를 세었음..

처음 시도했을때는 문자열을 맨 처음 인덱스부터 검사하면서 경우의 수를 나눠서 세는 방법으로 짰었는데,,,

원하는 결과는 제대로 나왔었는데 채점에서 틀렸다고 나와서... ㅠ.ㅠ

좀 쉬다가 하니까 이렇게 쉬운 방법이 보임...

반응형

'코딩 관련 > 코딩문제풀기' 카테고리의 다른 글

[JAVA] 9012번 괄호  (0) 2023.03.13
[JAVA] 너의 평점은  (0) 2023.03.12
[JAVA] 그룹 단어 체커  (0) 2023.03.12
[JAVA] 직사각형에서 탈출  (0) 2023.03.09
[JAVA] 4344번 평균은 넘겠지 문제  (0) 2023.03.09
반응형

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

import java.util.Scanner;
public class Main {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        StringBuilder sb = new StringBuilder();
        
        for(int i=str.length()-1;i>=0;i--){
            sb.append(str.substring(i,i+1));
        }
        
      System.out.println(str.equals(sb.toString())? 1 : 0);
    }
}

 

* 학습내용

1. 문자열 받기 : scanner.nextLine()

2. 문자열 붙이기 : StringBuilder 사용

+ 이나 concat을 사용해도 됨.

반응형
반응형

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

import java.util.Scanner;
public class Main {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        int h=0;
        int w=0;
        int x=0;
        int y=0;
        while(scanner.hasNextInt()){
        x = scanner.nextInt();
        y = scanner.nextInt();
        w = scanner.nextInt();
        h = scanner.nextInt();
        }
        int m1 = Math.min(h-y,y);
        int m2 = Math.min(w-x,x);
    

      System.out.println(Math.min(m1,m2));
    }
}

 

* 학습내용

1. 두 수 중에 최소값 구하기

Math.min(X,Y)

Math 자체를 너무 오랜만에 써봄...

 

2. 입력받기

Scanner sc = new Scanner(System.in);

정수 입력받기 : sc.nextInt();

문자열 입력받기 : sc.nextLine();

입력도 받아볼 일이 없어서 써본 기억이 가물가물...

반응형

'코딩 관련 > 코딩문제풀기' 카테고리의 다른 글

[JAVA] 9012번 괄호  (0) 2023.03.13
[JAVA] 너의 평점은  (0) 2023.03.12
[JAVA] 그룹 단어 체커  (0) 2023.03.12
[JAVA] 크로아티아 알파벳  (0) 2023.03.11
[JAVA] 4344번 평균은 넘겠지 문제  (0) 2023.03.09
반응형

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

import java.util.Scanner;

public class MyClass {
    public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      int testcase = sc.nextInt();  //케이스 수
      for(int i=1;i<=testcase;i++){
          int students = sc.nextInt();
          int[] student = new int[students];
          int sum=0;
          for(int s=0;s<students;s++){
              student[s] = sc.nextInt();
              
              sum+= student[s];
          }
          float avg= sum/students;
         
          int over=0;
          for(int s=0;s<students;s++){
              if(student[s]>avg){
                  over +=1;
              }
          }
            float percent = (float)over/(float)students * 100;
          System.out.printf("%.3f",percent);
          System.out.print("%\n");
      }
    }
}

 

* 학습내용

1.  float : 소수점 7자리까지 표현

double : 소수점 16자리까지 표현

자바에서 실수 연산은 기본적으로 double타입.

 

2. 소수점 자리수 컨트롤 : %.3f

포맷스트링 사용하여 출력 : printf 

현업에서 쓴지 오래되어 잊고 있던 표현방식..

 

3. 변수명을 case로 했었는데

not a statement 에러가 떴다.

case는 자바 예약어이므로 사용하지 말 것.

 

반응형

'코딩 관련 > 코딩문제풀기' 카테고리의 다른 글

[JAVA] 9012번 괄호  (0) 2023.03.13
[JAVA] 너의 평점은  (0) 2023.03.12
[JAVA] 그룹 단어 체커  (0) 2023.03.12
[JAVA] 크로아티아 알파벳  (0) 2023.03.11
[JAVA] 직사각형에서 탈출  (0) 2023.03.09
반응형

특정 URL을 호출하며 쿠키를 전송하려고 하는데 전송이 안 된다..?

일단 현재 페이지와 호출하려는 URL, 쿠키의 도메인에 따라서 전송가능 여부가 달라진다.

 

확인해야 할 사항

현재 페이지의 도메인, 프로토콜 &  호출하려는 URL의 도메인, 프로토콜 확인

  쿠키 전송 방향 도메인 프로토콜 쿠키 전송 가능 여부
1 https://site.example.com https://site.example.com 같음 같음 그냥 됨
2 https://site.example.com http://site.example.com 같음 다름 크로스 사이트로 간주함.
교차스킴 정책 참고
3 https://site.example.com  https://site.test.com 다름 같음 크로스 사이트로 간주함.
교차스킴 정책 참고
4 https://site.test.com https:// site.example.com 다름 다름 크로스 사이트로 간주함.
교차스킴 정책 참고

* 크로스 사이트(cross-site) 
  호출하는 URL이 도메인이 다른경우 혹은 http, https 와 같이 사용하는 프로토콜(scheme)이 다른 사이트의 경우
* 서드파티 쿠키
  사용자가 접속한 페이지와 다른 도메인에서 발행한 쿠키
* 퍼스트파티 쿠키
  사용자가 접속한 페이지의 도메인에서 발행한 쿠키

 

일반적으로 크로스 사이트(Cross-site)로의 쿠키전송은 안 됨. 서드파티 쿠키전송이 안 됨.

하지만 쿠키의 SameSite 속성 설정으로 서드파티 쿠키 전송을 가능하게 할 수 있다. 

 

* SameSite 속성
  SameSite 속성은 크로스사이트 요청에서 쿠키 전송을 제한하는 기능을 한다.

 

 

쿠키 생성 시 SameSite 속성 설정하는 예시

javascript

document.cookie = "mycookie=testContent; domain=example.com; Path=/; SameSite=None; Secure;"

 

JAVA

@RequestMapping(value = "/test/setCookieTest")
	public HttpServletResponse setCookieTest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	String cookieValue = "CookieTest=CookieTest; Max-Age=3600; Path=/; SameSite=Lax";  
	Domain="example.com;";
	response.addHeader("Set-Cookie", cookieValue);
	return response;
}

 

SameSite 속성값 설명
none none으로 설정된 쿠키의 경우 크로스 사이트 요청의 경우에도 항상 전송됨
Secure 속성을 꼭 함께 붙여줘야 함
Strict 크로스 사이트 요청에는 항상 전송되지 않음
Lax 몇 가지 예외적인 요청에만 전송됨
예)
<a>를 클릭해서 이동
windows.location.replace 로 자동으로 이동
302 리다이렉트를 통한 이동
<iframe>이나 <img>를 삽입할 때 발생되는 http 요청은 쿠키 전송 안 됨.

 

samesite 속성이 Lax이거나 None이며 secure 속성도 넣었는데 전송이 안된다면...?

아래 교차스킴 정책을 참고해보자..

 

반응형

 

교차스킴 유형에 따른 쿠키 전송 정책

* 교차스킴
URL이 모두 동일한 등록 가능 도메인(예: site.example)을 가지고 있지만 
스킴(프로토콜)은 서로 다르며(예: http://site.example과 https://site.example), 이를 교차 스킴이라고 한다.

2020년 이후로 구글에서 교차스킴에 대한 쿠키전송 정책을 변경한다고 했다.
이제 도메인이 같아도 프로토콜이 다르면 크로스사이트로 간주한다 이말인듯

아래의 교차 스킴 유형에 따라 쿠키 전송을 위한 SameSite 속성값이 다름..

 

1) case 1 - Navigation

페이지 이동하는 경우라고 생각하면 될 듯하다.
하이퍼링크를 클릭해서 페이지를 이동하거나
<a>를 클릭해서 이동하거나 windows.location.replace 로 자동으로 이동하거나,
302 리다이렉트를 통한 이동을 포함함.
쿠키의 SameSite 값에 따라 쿠키가 전송될수도, 안 될수도 있다.

 

2) case 2 - 하위 리소스 요청

페이지 내에서 iframe이나 script, fetch, XMLHttpRequest를 통해 url을 요청하는 경우

 

3) case3 - POST양식 submit

form데이터를 POST 전송하는 경우이다.

 

아무리 정리해봐도 넘 헷갈리는...

틀린 부분이 있으면 댓글로 알려주십셔

 


참고

https://web.dev/i18n/en/schemeful-samesite/

 

Schemeful 동일 사이트

"동일 사이트"의 정의는 URL 체계를 포함하도록 진화하고 있습니다. 따라서 사이트의 HTTP와 HTTPS 버전 간의 링크는 이제 크로스 사이트 요청으로 계산됩니다. 가능한 한 문제를 방지하기 위해 기

web.dev

https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content

 

Mixed content - Web security | MDN

When a user visits a page served over HTTPS, their connection with the web server is encrypted with TLS and is therefore safeguarded from most sniffers and man-in-the-middle attacks. An HTTPS page that includes content fetched using cleartext HTTP is calle

developer.mozilla.org

 

반응형
반응형

JAVA로 

HttpServletRequest를 받을 때 charset을 설정하는 방법

request.setCharaterEncoding("charset이름");

@RequestMapping(method = RequestMethod.POST,path = "/result")
public String result(HttpServletRequest request, HttpServletResponse response,Model model) {
        try {
            request.setCharacterEncoding("EUC-KR"); 
            HashMap<String, String> map = new HashMap<>();
            map.put("P_STATUS", request.getParameter("P_STATUS"));
            map.put("P_RMESG1", request.getParameter("P_RMESG1"));
        }catch(Exception e){
            e.printStackTrace();
        }
        return "form";
}
반응형
반응형

@Autowired 로 주입한 객체가 null이라고 뜨는 경우

-> 의존성 주입이 제대로 되지 않음.

 

객체를 @Autowired로 주입한 클래스를

new로 생성하였는지 확인한다. 

-> 클래스를 new로 생성하지 말고 @Autowired로 주입시켜 사용하자.

 

참고))

https://rimkongs.tistory.com/256

 

[Spring] @Autowired 한 class가 null로 나오는 문제 해결법 (Spring 의존성 주입 문제)

우리는 보통 bean에 의존성 주입을 하고 싶을 때, @Autowired 를 사용하는데요. @Autowired한 class 가 null 이 나왔다는 건, 해당 클래스에 의존성 주입이 제대로 이루어지지 않았다는 것입니다. Spring에서

rimkongs.tistory.com

 

반응형
반응형

1. dependencies

jpa 의존성과 postgreSQL 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.postgresql:postgresql'

 

2. application.yml

spring:
##JPA 설정정보
  jpa:
    hibernate:  
      ddl-auto: update  	##update로 해놔야 테이블 update가 됨
      format_sql: true      
      naming:				
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
	##entity를 camelCase로 작성시 db에는 snake_case로 컬럼명이 들어가게 되는데 이걸 막기위함.

##POSTGRESQL 연결정보
  datasource:
    maximum-pool-size: 4
    url: jdbc:postgresql://${HOST}:5432/mydatabase
    username: ${USERNAME}
    password: ${PASSWORD}
    driver-class-name: org.postgresql.Driver

 

 

3. entity 작성

@Entity 어노테이션이 필요하다.

@Table 어노테이션으로 맵핑할 db의 테이블 이름을 적어준다. 

import org.springframework.stereotype.Component;

import javax.persistence.*;
import java.util.Date;

@Component
@Table(name = "member")  //맵핑할 db의 table 이름
@Entity(name = "member")
public class Member {

    @Id //기본 키 매핑
    @GeneratedValue(strategy = GenerationType.AUTO) //자동증가
    private long idx;
    private Date regDate;
    private String age;
    
    public long getIdx() {
        return idx;
    }
    public void setIdx(long idx) {
        this.idx = idx;
    }
    public Date getRegDate(){
        return regDate;
    }
    public void setRegDate(Date regDate){
        this.regDate = regDate;
    }
    public String getAge(){
        return age;
    }
    public void setAge(String age){
        this.age = age;
    }
}

 

반응형

4. db에 CRUD할 repository 작성

JpaRepository를 상속받고

@Repository 어노테이션을 적어준다.

여기서는 insert만 할거라 save만 적어줌

import kr.co.dominos.order.payment.entity.Member;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;


@Repository
public interface MemberRepository extends JpaRepository<Member,String> {
    Member save(Member member);
}

 

5. controller로 테스트

import kr.co.dominos.order.payment.entity.Member;
import kr.co.dominos.order.payment.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;


@RestController
@RequestMapping(value="api")
public class ApiController {

   @Autowired
    MemberRepository memberRepository;

   @Autowired
   Member member;

    @RequestMapping(method = RequestMethod.POST,path = "/save")
    public String savtest() {
        member.setAge("123123");
        Date today = new Date();
        member.setRegDate(today);

        try {
            memberRepository.save(member);
        }catch(Exception e){
            e.printStackTrace();
        }
        return "okok";
    }
}

 

이외에 다른 db config나 jpa config는 하지 않았음.

반응형

+ Recent posts