본문 바로가기
(2024-10) 스파르타 내일배움캠프 - 백엔드/TIL

(2024-11-19) TIL: HasNext()와 정규표현식

by 어뫄어뫄 2024. 11. 19.

 

1.scanner.HasNext()와 정규표현식을 활용한 접근 제어

 

 

 

전체 코드

import java.util.Scanner;

public class RegexExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String regex = "[a-z0-9]+";

        System.out.println("문자를 입력하세요 (종료하려면 'exit' 입력):");

        while (scanner.hasNext()) { // 입력이 있는 동안 반복
            String input = scanner.next(); // 사용자 입력 받기
            
            if (input.equals("exit")) {
                break; // 종료 조건
            }

            // 정규 표현식으로 입력 검사
            if (input.matches(regex)) {
                System.out.println(input + "는 유효한 입력입니다.");
            } else {
                System.out.println(input + "는 유효하지 않은 입력입니다.");
            }
        }

        scanner.close();
    }
}

 

 

 

초기 상태

Scanner scanner = new Scanner(System.in);
String regex = "[a-z0-9]+";

 

+-----------------------+
|      메모리 상태      |
+-----------------------+
| scanner               |
| regex: "[a-z0-9]+"    |
+-----------------------+

 

 

 

사용자 입력 문자열(input) 저장 정규 표현식 매칭

while (scanner.hasNext()) { // 입력이 있는 동안 반복
    String input = scanner.next(); // 사용자 입력 받기
    ...
    if (input.matches(regex)) {
        System.out.println(input + "는 유효한 입력입니다.");
    } else {
        System.out.println(input + "는 유효하지 않은 입력입니다.");
    }
}

 

+-----------------------+
|      메모리 상태      |
+-----------------------+
| scanner               |
| regex: "[a-z0-9]+"    |
| input: (사용자 입력)  |
+-----------------------+

출력: "유효/유효하지 않음"

 

String 자료형은 matches 메서드를 통해 정규표현식 조건에 일치하는 지 볼 수 있다. 

scanner도 hasNext()를 통해 입력값을 바로 정규표현식과 일치여부를 볼 수 있다.

둘 다 반환값은 boolean이다.

 

 

 

종료 조건

if (input.equals("exit")) {
    break; // 종료 조건
}

 

+-----------------------+
|      메모리 상태      |
+-----------------------+
| scanner               |
| regex: "[a-z0-9]+"    |
| input: "exit"         |
+-----------------------+

 

 

스캐너 종료

scanner.close();

 

+-----------------------+
|      메모리 상태      |
+-----------------------+
| regex: "[a-z0-9]+"    |
+-----------------------+

 

 

2.데일리 루틴

SQL

SELECT
    CASE
        WHEN PRICE < 10000 THEN '0'
        WHEN PRICE < 20000 THEN '10000'
        WHEN PRICE < 30000 THEN '20000'
        WHEN PRICE < 40000 THEN '30000'
        WHEN PRICE < 50000 THEN '40000'
        WHEN PRICE < 60000 THEN '50000'
        WHEN PRICE < 70000 THEN '60000'
        WHEN PRICE < 80000 THEN '70000'
        WHEN PRICE < 90000 THEN '80000'
        END AS PRICE_GROUP,            
    count(product_id) AS PRODUCTS
FROM
    PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP

CASE WHEN ~ THEN ~ 문법을 사용하는 예제 수준 문제가 나왔다.

숫자 자료에서 대소비교를 사용하는 게 그동안 나온 것과 차이점이다.

연산 순서를 유의하는 게 좋다. FROM으로 테이블을 불러오고, CASE WHEN으로 IF문과 같은 방식으로 데이터를 반환하고, GROUP BY와 count 조합으로 연산된 다음, 마지막으로 정렬된다.

 

 

Java

class Solution {
    public int solution(int[][] sizes) {
        int maxWidth = 0;
        int maxHeight = 0;

        for (int[] size : sizes) {
            // 가로와 세로 길이 중에서 큰 값을 maxWidth에, 작은 값을 maxHeight에 저장
            int width = Math.max(size[0], size[1]);
            int height = Math.min(size[0], size[1]);
            
            maxWidth = Math.max(maxWidth, width);
            maxHeight = Math.max(maxHeight, height);
        }

        // 지갑의 크기 계산 (maxWidth * maxHeight)
        return maxWidth * maxHeight;
    }
}

이중배열을 순회하며 간단하게 최대 값을 찾는 문제다.

 

 

 

 

참조. 정규표현식을 정리했다. 예제만 따라가도 정규표현식 개념들이 습득되도록 쉽게 배치했다.

https://playnplayer.tistory.com/manage/posts/

'(2024-10) 스파르타 내일배움캠프 - 백엔드 > TIL' 카테고리의 다른 글

(2024-11-21) 스파르타 키오스크 과제  (0) 2024.11.21
(2024-11-20) TIL  (1) 2024.11.20
(2024-11-18) TIL  (1) 2024.11.18
(2024-11-15) TIL  (1) 2024.11.15
(2024-11-14) TIL  (0) 2024.11.14