알고리즘 문제 풀이 / 프로그래머스 (programmers) - 코딩테스트 2번
요즘 이것저것 사적인 일들이 너무 바빠서 블로그 업로드를 잘 하지 못했다. 여러가지 다른 문제들도 많이 풀어놓았으니 차근차근 하나씩 업로드를 하도록 하겠다. 오늘은 와디즈 코딩챌린지 2번문제 해설을 해보려고한다. 이 문제를 풀려고 봤을 때 처음엔 어떻게 할지 막막했지만 한참을 문제를 읽고 생각해보니 코드 짜는건 금방 할 수 있는 문제였다.
문제 설명
저작권의 문제로 문제설명은 생략하겠습니다.
입출력 예
code "a=3", "..a=4", "..b=3", "..print a", ".......a=6", ".......print a", ".......print b", "..print a", "....a=7", "....print a", "print a", "print b", "a=4", "print a", "...print a"]
result
["a=4", "a=6", "b=3", "a=4", "a=7", "a=3", "error", "a=4", "a=4"]
문제 풀이
변수가 나올 땐 '.' 의 개수로 해당 변수의 블럭값을 map에 저장한다.
이미 map에 있는 변수라면 해당 블럭값의 크기에 따라 추가/삭제 한다.
print가 나올 땐 그 변수가 해당되는 블럭의 변수 값을 출력하고 없다면 error를 출력한다.
. 의 개수만큼 블럭값이 정의되는 것이므로 해당 변수와 블럭값을 map 에 저장했다. 시험에서는 변수명+블럭값 을 map의 key로 저장했었는데 지금 생각해보면 그렇게 좋은 코드인 것 같지 않아 다른 방법을 생각해보고 있는 중이다. 이는 해결한 후 추후 이 게시글에 업데이트 하도록 하겠다. print 일 때 변수에 맞는 블럭의 값을 출력하고 제거한다. 만약 없다면 error 표시한다.
public static String[] solution(String[] code) {
HashMap<String, String> map = new HashMap<>();
ArrayList<String> list = new ArrayList<>();
int size = code.length;
int num = 0;
for(int i = 0; i < size; i++) {
if(code[i].contains("print")) {
num = code[i].indexOf("print");
String value = code[i].substring(num+6);
if(map.containsKey(value + num)) {
list.add(value + "=" +map.get(value+num));
}else {
while(!map.containsKey(value+num) && num > -1) {
num--;
}
if(num < 0) {
list.add("error");
}else{
list.add(value + "=" +map.get(value+num));
}
}
}else {
num = code[i].lastIndexOf(".") + 1;
map.put(code[i].substring(num, num+1) + num, code[i].substring(num+2));
}
}
String[] answer = list.toArray(new String[list.size()]);
return answer;
}
'후기 및 회고 > 코딩테스트 리뷰' 카테고리의 다른 글
이마트 코딩테스트 후기 (0) | 2021.10.11 |
---|---|
[프로그래머스(programmers)] (2021 와디즈 코딩챌린지) 3번 : we make CODE #better (0) | 2021.08.26 |
[프로그래머스(programmers)] (2021 와디즈 코딩챌린지) 1번 : we make CODE #better (0) | 2021.08.21 |
네이버 웹툰 2차 과제테스트 (0) | 2021.07.10 |
[프로그래머스(programmers)] 네이버 웹툰 1차 코딩테스트 합격 후기 (0) | 2021.07.07 |
댓글