푼 문제 : 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줄이면 되는 코드를 왜 늘려놨죠
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] 이런 식으로 했었는데 뭔가 굳이 그럴 필요가 있을까 하고 생각하다가 나온 결과물.
일단 다른 것 들도 해야 될게 있어서 여기까지..
문제만 풀면 모르겠는데 정리하면서 하다보니까 생각보다 시간이 오래 걸린다. 근데 생각보다 재밌군..
'알고리즘' 카테고리의 다른 글
[200316/D-4] 백준 알고리즘 공부 (0) | 2020.03.16 |
---|---|
[200313/D-3] 백준 알고리즘 공부 (0) | 2020.03.13 |
[200311/D-1] 백준 알고리즘 공부 (0) | 2020.03.11 |
백준 알고리즘 문제 풀이 관련 (0) | 2020.03.11 |
백준 알고리즘 8958 (0) | 2019.09.09 |
댓글