본문 바로가기
알고리즘

[200312/D-2] 백준 알고리즘 공부

by mingutistory 2020. 3. 12.
728x90

푼 문제 :  11718, 11719, 11720, 11721, 2741, 2742, 2739, 1924

전체 비율 : 13 / 155 (약 8%) 

공부 시간 : 약 2시간

 

11718

 

어제 고민하던 부분은 엔터 입력 같은 부분에서 그냥 string str로 다 받으면 예외 처리가 힘든 것 같은데 정확하게 모르겠다. 같은 고민을 하는 사람은 발견했는데 엔터 때문에 사용했다고 했는데 내 코드에서는 엔터도 잘 막는데?

public class Main {
 
    public static void main(String[] args) {
        Scanner scan= new Scanner(System.in);
         
        while (scan.hasNextLine()) {
            String word = scan.nextLine();
            if (word.startsWith(" ") || word.endsWith(" ") || word.length()>100 || word.isEmpty()) {
                break;
            }
            
            System.out.println(word);
        }
        
	}
}

 

 

어제 고민 하던 부분 while문 조건에서 scan.hasNext()을 scan.hasNextLine()으로 변경했더니 된다. 

 

sc.hasNext() : 다음 토근이 있는지 확인, 공백 무시

sc.hasNextLine() : 다음 행이 있는지 확인

 

next() vs nextLine() : next는 공백, nextLine 엔터를 기준으로 입력을 받음. 

 

 

11719

public class Main {
 
    public static void main(String[] args) {
        Scanner scan= new Scanner(System.in);
         
        while (scan.hasNextLine()) {
            String word = scan.nextLine();
            if (word.length()>100) {
                break;
            }
            
            System.out.println(word);
        }
        
    }
}

 

11720

public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        int t = sc.nextInt();
        
        int sum = 0; 
        String str = sc.next();
        for(int i = 0; i < t; i++) {
        	int a = str.charAt(i) - '0';
        	System.out.println(a);
        	sum += a;
        }
        
        System.out.println(sum);
        
    }
}

char to int java

자바 char형 int로 변형 

 

- '0' 을 해주면 int형으로 변환 가능. 

왜냐면 아스키코드가 0은 48, 1부터는 49씩이기 때문.

Character.getNumericValue(input.charAt(i)) 이 메소드 사용해도 된다고 한다.

 

 

11721

 

public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        String str = sc.next();
        if(str.length() == 0 || str.length() > 100 || !(getType(str))) {
        	return;
        }
 
            for(int i = 0; i < str.length(); i++) {
            	
            	System.out.print(str.charAt(i));
            	if(i % 10 == 9) {
            		System.out.println();
            	}
      
            }        	
        }

        
    
    public static boolean getType(String word) {
        return Pattern.matches("^[a-zA-Z]*$", word);
    }

}

입력 받은 문자열 열 개씩 끊어서 출력하기. 하나씩 아스키 코드로 확인하면서 해야하나 하다가 정규화 생각나서 써봄. 습관처럼 정규화 메소드 빼기는 했는데 이 경우에는 한 번 밖에 안 사용하니까 그냥 저기에 넣어도 되는거 같기도 하고.  아직 이런 것들이 익숙하지 않다. 그냥 이런 건 나만의 패턴 뭐 그런건가. 

 

생각보다 조금 오래 걸렸다. 이중 for문을 돌리려는 쓸데 없는 생각을 했기 때문.

 

2741

 

import java.util.Scanner;

public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        int n = sc.nextInt();
        
        for(int i = 1; i <= n; i++) {
        	System.out.println(i);
        }
    }

}

 

2742

import java.util.Scanner;

public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        int n = sc.nextInt();
        
        for(int i = n; i > 0; i--) {
        	System.out.println(i);
        }
    }

}

 

2739

import java.util.Scanner;

public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        int dan = sc.nextInt();
        
        for(int i = 1; i < 10; i++) {
        	System.out.println(dan + " * " + i + " = " + (dan * i));
        }
    }

}

10줄이면 되는 코드를 왜 늘려놨죠

https://youtu.be/CuOwAqEk348

 

 

1924

 

요일 구하기

 

public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
         
        int[] month_arr = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        String[] day_arr = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
        
        int month = sc.nextInt();
        int date = sc.nextInt();
        
        int tot = date;
        for(int i = 0; i < month-1; i++) {
        	tot += month_arr[i]; 
        }
        
        System.out.println(day_arr[tot % 7]);
    }

}

우선 방식을 생각하지 못했다. 

요일 배열을 통해서 총 합을 만들어야겠다고 생각하지 못 했음. 9월 2일에서 1월 1일을 어떻게 빼지 이러고 있었다. 

그리고 뭔가 있어야 될거 같아서 day_arr을 만들고 출력 할 때 switch문을 쓰고 day_arr[tot%7] 이런 식으로 했었는데 뭔가 굳이 그럴 필요가 있을까 하고 생각하다가 나온 결과물. 

 

일단 다른 것 들도 해야 될게 있어서 여기까지..

문제만 풀면 모르겠는데 정리하면서 하다보니까 생각보다 시간이 오래 걸린다. 근데 생각보다 재밌군.. 

 

300x250

댓글