본문 바로가기
후기 및 회고/코딩테스트 리뷰

[프로그래머스(programmers)] (2021 와디즈 코딩챌린지) 2번 : we make CODE #better

by 광진구뚝배기 2021. 8. 24.

알고리즘 문제 풀이 / 프로그래머스 (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;
}

 

 




반응형

댓글