[KOSTA] Spring 기반 Cloud 서비스 개발자 양성 과정 17일차 - 정규 표현식, 자료구조(List) 실습

JUNBEOM PARK·2022년 2월 22일
0
post-thumbnail

🎲 정규 표현식

서울특별시 마포구에 사는 사람은 1명
부산광역시 동구에 사는 사람은 2명
서울특별시 중랑구에 사는 사람은 2명
서울특별시 노원구에 사는 사람은 1명
인천광역시 남동구에 사는 사람은 1명
경기도 구리시에 사는 사람은 1명
서울 중랑구에 사는 사람은 1명
서울특별시 구로구에 사는 사람은 1명
충청남도 예산군에 사는 사람은 1명
충청남도 천안시에 사는 사람은 1명
충청남도 당진시에 사는 사람은 1명

Pattern, Matcher 클래스를 활용해 위와 같은 결과를 출력 해라

📃 풀이

package kosta.api;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

	public static void main(String[] args) {
    
		String reg = "((([가-힣]+(시|도))|서울|부산|대구)\\s[가-힣]+(시|구|군))";
		
		//~시에 살거나 서울, 인천, 대구, 광주, 부산, 울산 의 주소를 가지고 뒤쪽에 시, 군,구 로 끝나는 부분을
		Map<String, Integer> map = new HashMap<String, Integer>();
		//키워드와 갯수를 가지는 리스트에
		String[] addresses = { "서울특별시 중랑구 공릉로 13길 27", "서울특별시 중랑구 겸재로 68 (면목동)",
				"서울특별시 노원구 공릉로 95 (공릉동)",
				"서울특별시 구로구 가마산로 77 (구로동)", "서울특별시 마포구 가양대로 1 (상암동)",
				"충청남도 천안시 동남구 성남면 5산단1로 22",
				"부산광역시 동구 고관로 5 (초량동)", "인천광역시 남동구 간석로 2 (간석동)",
				"충청남도 예산군 신암면 오신로 852-2", "충청남도 당진시 우강면 박원로 138",
				"부산광역시 동구 중앙대로 243-13 (초량동)", "경기도 구리시 동구릉로136번길 47 (인창동)",
				"서울 중랑구 공릉로 13길 27" };		
		
		Pattern p = Pattern.compile(reg);
		for (String address : addresses) {
			Matcher m = p.matcher(address);
			if (m.find())
				map.put(m.group(), map.getOrDefault(m.group(), 0) + 1);
		}

		for (Entry<String, Integer> s : map.entrySet())
			System.out.println(s.getKey() + "에 사는 사람은 " + s.getValue() + "명");

	}

}

🎲 로또 번호

로또 번호 1 ~ 45 까지 중복 되지 않는 정수 6개를 배열,List,Set으로 구현

📃 풀이

package kosta.api;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

public class ListMission2 {

	public static void main(String[] args) {
		//로또번호 1~45 중복되지 않는 정수 6개를 출력하라.
		//1. 배열로 구현
		int arr[] = new int[6];
		Random r = new Random();
		
		for(int i = 0; i < arr.length; i++) {
			arr[i] = r.nextInt(45)+1;
			for(int j = 0; j < i; j++) { // 기존에 있는 데이터 값 비교 하는 for문
				if(arr[i] == arr[j]) {
					i--;
				}
			}
		}
		
		Arrays.sort(arr);
		System.out.println("======배열로 구현=======");
		System.out.println(Arrays.toString(arr));
		
		
		
		//2. List자료구조로 구현 : contains(정수) => 중복체크 true/false
		System.out.println("========List로 구현=========");
		List<Integer> list = new ArrayList<Integer>();
		
		while(true) {
			int n = r.nextInt(45)+1;
			if(list.contains(n)) {
				continue;
			}else {
				list.add(n);
			}
			
			if(list.size() == 6) break;
		}
		
		Collections.sort(list);
		
		Iterator<Integer> iter = list.iterator();
		while(iter.hasNext()) {
			System.out.print(iter.next()+", ");
		}
		System.out.println();
		
		
		
		
		//3. Set 자료구조로 구현
		System.out.println("=======Set으로 구현=======");
		Set<Integer> set = new TreeSet<Integer>();
		
		for(int i = 0; set.size() < 6; i++) {
			set.add(r.nextInt(45)+1);
		}
		
		System.out.println(set);
	}

}


profile
DB 엔지니어👍

0개의 댓글