반응형

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

import java.util.Scanner;
import java.util.Stack;

public class MyClass {
    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        int testcase = Integer.parseInt(sc.nextLine()); //case 수

	for(int i = 1; i <= testcase ; i++){
            String line = sc.nextLine();
            Stack<Character> stack = new Stack<>();
                for(int c = 0;c<line.length();c++){
                    //여는 괄호
                    if('(' == line.charAt(c)){
                       stack.push(line.charAt(c));
                    }else{
                    //닫는괄호
                        if(stack.empty()){
                            System.out.println("NO");
                            break;
                        }else{
                            stack.pop();
                        }
                       
                    }
                    
                    if(c==line.length()-1){
                        if (stack.empty()) {
			                System.out.println("YES");
	                   	}else{
	                   	    System.out.println("NO");
	                   	}
                    }
                    
                }
              
        }
    }
}

 

* 학습내용

1. String과 char의 비교

- char은 ''를 사용

- String은 ""를 사용

- str.equals(String.valueOf(ch))

- 그냥 '' == ch 해서 char끼리 비교하자...

 

2. Stack 타입 변수 사용

- 스택 선언하기 :  Stack<> stack = new Stack<>();

- push(), pop(), empty()

 

3. 메모리 사용 영역

JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리 영역을 다음과 같이 세부 영역으로 구분해서 사용한다.

1) Method 영역

- 클래스별로 런타임 상수풀, 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드 등을 분류하여 저장한다.

2) Heap 영역

- 객체와 배열이 생성되는 영역

- 생성된 객체/배열을 참조하는 변수나 필드가 없다면 Garbage Collector를 실행시켜 힙 영역에서 자동으로 제거한다.

3) JVM Stack 영역

- 각 스레드가 시작될 때 할당된다.

- 메소드를 호출할 때마다 프레임(메소드의 변수 및 기타 부가정보로 이루어짐)을 push 하고 메소드가 종료되면 pop 하는 동작을 수행함.

- 프레임 내부에는 로컬 변수 스택이 있는데, 최초로 변수에 값이 저장될 때 생성됨.

- 기본 타입 변수는 스택영역에 직접 값을 가짐

- 참조 타입 변수는 값이 아니라 객체 주소를 가짐.

반응형

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

[JAVA] 너의 평점은  (0) 2023.03.12
[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/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() : 한 줄 입력받기. 처음 써봤다.

 

반응형

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

[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/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/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

+ Recent posts