안녕하세요. delay100 입니다!
벌써 TIL을 작성한지 3주차가 되어가네요!! 오늘도 정규세션에 참가하였습니다.
미들러 문제
1번. 괄호 회전하기
https://school.programmers.co.kr/learn/courses/30/lessons/76502
풀이에는 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에 값이 잘 들어가는 것을 확인할 수 있습니다.
2번. 의상
https://school.programmers.co.kr/learn/courses/30/lessons/42578
문제를 해결하기 위해서 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
2번.
https://school.programmers.co.kr/learn/courses/30/lessons/77484
+ 챌린저 문제
1번.
https://school.programmers.co.kr/learn/courses/30/lessons/132266
2번.
https://school.programmers.co.kr/learn/courses/30/lessons/68646
Map의 Iterator 사용 방법에 대해 다시한번 상기시켰던 문제였습니다.
봐주셔서 감사합니다. 피드백 환영합니다.
'항해99 > 99club1기TIL' 카테고리의 다른 글
[99club/TIL] 3주차 - 목요일 TIL(Today I Learned) (0) | 2024.04.11 |
---|---|
[99club/TIL] 3주차 - 화요일 TIL(Today I Learned) (0) | 2024.04.09 |
[99club/TIL] 2주차 - 일요일 TIL(Today I Learned) (0) | 2024.04.07 |
[99club/TIL] 2주차 - 토요일 TIL(Today I Learned) (0) | 2024.04.06 |
[99club/TIL] 2주차 - 금요일 TIL(Today I Learned) (0) | 2024.04.05 |