항해99/99club1기TIL

[99club/TIL] 3주차 - 월요일 TIL(Today I Learned)

delay100 2024. 4. 8. 23:06
728x90
반응형
SMALL

안녕하세요. delay100 입니다!

벌써 TIL을 작성한지 3주차가 되어가네요!! 오늘도 정규세션에 참가하였습니다.

99club 게더타운이 리뉴얼 되었어요!


미들러 문제


1번. 괄호 회전하기

https://school.programmers.co.kr/learn/courses/30/lessons/76502

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이에는 ArrayList와 Stack을 이용했습니다.

원래 문제를 보자마자 Queue를 사용해야하나 싶었는데, Queue는 직접적으로 index 값에 접근할 수가 없어서 ArrayList를 이용했습니다.

import java.io.*;
import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        int slength = s.length();
        ArrayList<Character> list = new ArrayList<>(); // 변화하는 괄호들을 담아놓을 배열
        
        // ArrayList에 주어진 s 값에 대해 초기 값을 담음
        for(int i=0; i<slength; i++) {
            list.add(s.charAt(i));
        }
        
        // 괄호 한 칸씩 이동용 for문
        for(int i=0; i<slength; i++) {
            list.add(list.get(0)); // list의 가장 첫 번째 값을 list의 가장 마지막에 넣음 
            list.remove(0); // list의 가장 첫 번째 값을 삭제
            
            // for(int j=0; j<list.size(); j++) {
            //     System.out.print(list.get(j));
            // }
            // System.out.println();
            
            Stack<Character> stk = new Stack<Character>(); // 괄호의 쌍을 확인하기 위한 스택 선언
            boolean isFalse = false; // push와 pop되는 경우가 아닌 경우에 대한 처리를 위한 변수
            for(int j=0; j<slength; j++) {
                char c = list.get(j);
                if(c == '[' || c == '{' || c == '(') {
                    stk.push(c);
                } else if(!stk.isEmpty() && ((c == ']' && stk.peek() == '[') || (c == '}' && stk.peek() == '{') || (c == ')' && stk.peek() == '('))) {
                    stk.pop();
                } else {
                    isFalse = true; 
                    break;
                }
            }
            // 스택이 비어있고 push, pop 동작만으로 동작이 이뤄진 경우
            if(stk.isEmpty() && !isFalse) {
                answer++;
            }
        }
        
        return answer;
    }
}

중간에 주석처리된 print문을 실행하면 아래와 같이 ArrayList에 값이 잘 들어가는 것을 확인할 수 있습니다.

주석처리된 print문 실행 시 테스트1 결과


2번. 의상

https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제를 해결하기 위해서 HashMap을 이용해 Key(옷 분류), Value(옷 개수)로 나타내었습니다.

여기서 옷 각각의 이름은 중요하지 않습니다. 왜냐하면 각각의 옷 이름은 중복되지 않기 때문에 개수만 알아도 됩니다.

 

그리고 이 문제를 해결하기위해서 중요한 문장은 아래와 같습니다.

착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.

첫 번째 테스트 케이스로 예시를 들어보면, 아래와 같은 경우의 수가 나옵니다.

headgear 1번(yellow_hat) 2번(green_turban) 착용X => 총 3가지

eyewear 1번(blue_sunglasses) 착용X => 총2가지

경우의 수를 따지면 3X2를 하고 -1을 빼주어야 합니다. 왜 -1을 빼줘야 하냐면 아무것도 착용하지 않는 경우는 없기 때문입니다.

import java.io.*;
import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 0;
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        int cLength = clothes.length;
        
        for(int i=0; i<cLength; i++) {
            String clo = clothes[i][1];
            if(map.containsKey(clo)) {
                map.replace(clo, map.get(clo)+1);
            } else {
                map.put(clo, 1);
            }
        }
        
        int temp = 1;
        Iterator<String> iter = map.keySet().iterator();
  
        while(iter.hasNext()) {
           temp *= (map.get(iter.next())+1);
        }
    
        answer = temp -1;
        
        return answer;
    }
}

 


+ 비기너 문제

1번.

https://school.programmers.co.kr/learn/courses/30/lessons/86051

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2번.

https://school.programmers.co.kr/learn/courses/30/lessons/77484

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

+ 챌린저 문제

1번.

https://school.programmers.co.kr/learn/courses/30/lessons/132266

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2번.

https://school.programmers.co.kr/learn/courses/30/lessons/68646

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Map의 Iterator 사용 방법에 대해 다시한번 상기시켰던 문제였습니다.

봐주셔서 감사합니다. 피드백 환영합니다.

728x90
반응형
LIST