[프로그래머스] Lv1 푸드 파이터

changi123·2023년 8월 17일
0
post-thumbnail

문제설명

해결방안

(1) 1번 선수의 문자열은 결승점인 0 앞에 해당하는 문자열 먼저 조건에 해당하게 만들고 2번 선수는 앞에 문자열만 뒤집어 주면 될 것이다. 그 후 0 뒤에 2번 선수의 문자열을 붙이면 해결

코드

import java.util.*;
class Solution {
    public String solution(int[] food) {
         String answer = "";
        
        String first = "";
        
        List list = new ArrayList();
        
        for(int i= 1; i < food.length;i++) {
        	
        	int com = 0;
        	if( food[i] % 2 ==1 ) {
        		com = food[i] -1;
        	} else {
        		com = food[i];
        	}
        	for(int j = 0 ; j < com /2 ; j++) {
        		first = first + Integer.toString(i);
        		list.add(Integer.toString(i));
        	}
        	if(i == food.length-1) {
        		
        		first = first + "0";        
        	}	
        }
        Collections.reverse(list);
        
        for(int i= 0; i< list.size(); i++) {
        	first = first + (String) list.get(i);
        }
        return first;
    }
}

내 코드 설명

(1) 1번 선수의 문자열을 구할 변수 first, 나중에 2번 선수의 문자열을 구하기 위해 Collrections클래스 reverse 메소드를 사용하기 위한 list 선언
(2) 만약 음식의 개수가 홀수개라면 음식수 -1 를 해줘서 사용가능한 음식의 개수를 구한다.
(3) 1번 선수의 문자열만 먼저 구할 것이기 때문에 음식의 반복수는 (음식수-1) / 2 만큼 반복해준다. 이때 2번 선수의 문자열을 구하기위해 list에도 추가
(4) 만약 1번 선수가 결승점 전에 도달했다면 first + 결승점인 "0" 을 결합하여 함수 종료
(5) Collrections.reverse 메소드를 사용하여 1번 선수의 문자열의 뒤집어 2번 선수의 문자열을 구한다.
(6) 1번 선수 문자열+ "0" + 2번 선수 문자열

다른 사람 풀이

    public String solution(int[] food) {
        String answer = "0";
        
        for(int i = food.length-1 ; i>0 ; i--) {
        	for(int j = 0; j<food[i] /2 ; j++) {
        		answer = i + answer +i ;
        	}
        }
        return answer;
    }

다른 사람 코드 설명

(1) 결승점인 "0" 선언
(2) 음식의 개수 배열의 마지막 인덱스를 문자열 "0" 양 옆에 food[i]/2 만큼 붙인다.

느낀점

단순히 결승점으로부터 똑같이 반복되는 조건만 찾으면 되는걸 평소에 Collretions 클래스의 reverse() 메소드를 많이 사용하다보니 너무 어렵게 생각한 것 같다.. 어려운 문제는 단순하게 풀려다 못풀고 쉬운 문제는 너무 어렵게 푸는 경향이 있는 것 같다. 문제를 많이 풀어보자

profile
개발자 홍찬기 꾸준한 사람이 되자

0개의 댓글

관련 채용 정보