코딩테스트/프로그래머스

[Java] 프로그래머스 Level 1: 바탕화면 정리

이덩우 2023. 5. 23. 22:13

- 문제설명

- 제한사항

- 예시 & 입출력 예

- 해결과정

  • 모든 #을 포함해서 지워야하기 때문에, (가장 위에 있는 #의 y좌표, 가장 좌측에 있는 #의 x좌표) 부터 
    (가장 위에 있는 #의 y좌표, 가장 좌측에 있는 #의 x좌표) 까지 드래그를 긁어서 지우면 모두 포함되어 지울 수 있다.
    --> 동서남북 4방향에서의 가장 끝에 있는 #들의 좌표를 구해야겠다. 
    기본 세팅은 좌측상단에서 우측하단으로 갈수록 좌표값이 커진다.
    1. max_north_num :  for문을 통해 위에서 아래로 내려오며 #이 포함된 가장 상단의 인덱스를 구한다.
    2. max_south_num : 위에서 부터 내려오면 시간낭비, 가장 하단부터 위로 올라가며 찾는다.
    3. max_west_num : 1,2와 달리 array[]안의 모든 내용을 확인해야 가장 좌측 #의 좌표를 찾을 수 있다.
    따라서 각 배열안의 #중 어떤 것이 더 좌측인지 비교하기위한 변수 cmp를 생성.
    이후 for문을 통해 배열 안 두 개의 #좌표중 더 작은 것을 max_west_num에 넣어준다.
    4. max_east_num : 3과 동일한 방식 --> indexOf() 대신 lastIndexOf() 사용 
  • 이후 4개의 변수를 순서에 맞게 새로운 배열로 생성 후 리턴

- 솔루션

- 배운점

  • IndexOf()를 통해 특정 문자열의 인덱스를 출력할 때, 중복되는 문자열일 경우 먼저 찾아진 인덱스를 반환 후 break 된다.
  • 역방향 검색을 원한다면 last를 붙여 lastIndexOf() 메소드를 사용한다.