프로그래머스 코딩테스트(바탕화면 정리)

최주영·2023년 8월 30일
0

프로그래머스

목록 보기
2/2

✅ 난이도 : LEVEL 1

✅ 문제


✅ 풀이 방법

  • 내가 처음에 푼 답
    처음에 문제를 접근할 때, 각 예제의 규칙에 맞춰서 하나하나 for문으로 값을 찾았다
    각각의 규칙은 눈에 보이기 시작했지만, 하나로 통일되서 문제를 풀지않고 다음과 같이 복잡하게 풀었더니 76%의 테스트 케이스만 정답으로 인정되었다 밑에 코드를 살펴보자
package codingTest;

import java.util.HashMap;
import java.util.Map;

public class Main {

	public static void main(String[] args) {

		String wallpaper[] = { "..........", ".....#....", "......##..", "...##.....", "....#....." };
		int answer[] = {};
		int answer1[] = { 0, 0, 0, 0 };

		for (int i = 0; i < wallpaper.length; i++) {
			if (wallpaper[i].contains("#")) {
				answer1[0] = i;
				answer1[2] = wallpaper.length;
				break;
			}
		}

		int min = 50;
		for (int n = 0; n < wallpaper.length; n++) {
			if (min > wallpaper[n].indexOf("#") && wallpaper[n].indexOf("#") != -1) {
				min = wallpaper[n].indexOf("#");
			}
		}
		answer1[1] = min;

		int max = 0;

		for (int i = 1; i < wallpaper.length; i++) {
			if (max < wallpaper[i].lastIndexOf("#")) {
				max = wallpaper[i].lastIndexOf("#");
			}
		}

		answer1[3] = max + 1;

		for (int j = 0; j < answer1.length; j++) {
			System.out.println(answer1[j]);
		}

	}

}

즉 이 문제를 해결하기 위해서, 2중 for문으로 한번에 모든 경우의수를 해결할 수 있다는 것을 알게되었다
추가로 잘 사용하지 않았던, Math 함수를 사용하면 편하게 구할 수 있었다.

  • 최종 풀이
class Solution {
    public int[] solution(String[] wallpaper) {
        
        int hMin = wallpaper.length;
		int hMax = 0;
		int wMin = 50; // 최대길이가 50임
		int wMax = 0;
		
        // wallpaper 배열안의 각 인덱스안에 있는 문자열 중 #을 찾아서 각 규칙을 찾기
		for(int i=0; i<wallpaper.length; i++) {
			for(int j=0; j<wallpaper[i].length(); j++) {
				if(wallpaper[i].charAt(j) == '#') { 
					hMin = Math.min(i, hMin); 
					hMax = Math.max(i, hMax);
					wMin = Math.min(j, wMin);
					wMax = Math.max(j, wMax);
				}
			}
		}

		int answer[] = {hMin,wMin,hMax+1,wMax+1};

        return answer;
    }
}

result [a,b,c,d]
-> result[0] 의 값은 각 인덱스값에서 #이 포함되어있는 최초의 인덱스번호!
ex) 다른 방법 : 배열.indexOf()
-> result[1] 의 값은 인덱스 값에서 #이 포함되어있는 마지막 인덱스번호!
ex) 다른 방법 : 배열.lastIndexOf()
-> result[2] 의 값은 인덱스 안의 문자열 안에서 #이 포함되어있는 위치 중 가장 앞에있는 번호
-> result[3] 의 값은 인덱스 안의 문자열 안에서 #이 포함되어있는 위치 중 가장 뒤에있는 번호

  • 어려웠던 점
    -> 규칙을 찾는것에 대해서는 어렵지 않았지만, 주어진 시간복잡도 안에서 해결하는 것이 제일 어려웠었던 것 같다
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글