Skip to content

Conversation

@ManduTheCat
Copy link
Owner

@ManduTheCat ManduTheCat commented Oct 3, 2022

풀이

  • 램프의 특징으로 꺼지고 켜지는 상태만 존재합니다 그러므로 홀수번 누르면 바뀌고 짝수번 누르면 바뀌지 않는 성질이 있습니다.
  • K 횟수를 무조건 모두 소비합니다.
  • 데이터입력량 으로 인해 완탐을 고려 할수 없습니다. (K는 1,000보다 작고 N과 M은 50보다 작거나 같은 자연수입니다)
  • 입출력 케이스를 보며 출력인 램프가 모두켜진 행의 갯수와 입력간의 규칙을 찾아서 문제를 풀었습니다.
  • 처음으로 M 이 1일경우 열이 하나 뿐이므로 램프가 모두 켜진 행의 갯수는 K 가 홀수 면 반대로 켜지게 되고
    K 가 짝수면 그대로 유지 되기때문에 현재 켜진 갯수를 새서 출력하면됩니다.
    (44번째 줄에서 70번째줄)
  • M 이 1이 아닌경우 즉, 대부분의 경우에는 0의 갯수와 패턴의 갯수에 집중해야합니다.
  • 패턴의 같은게 많다는건 그만큼 동시에 켜질수 있는 행의 이라는 의미이기 떄문입니다.
  • 패턴의 0의 갯수는 K 가 홀수 일때 0의 갯수가 짝수이면 전부 켜질수 없고 또 반대로 패턴의0 의 갯수가 짝수인데 K 가 홀수 이면 전부다 킬수 없습니다.
  • 즉 K 가 짝수면 패턴이 가지고 있는0의 갯수도 짝수여야 하고 K 가 홀수면 패턴이 가지고 있는0의 갯수도 홀수여야 합니다.
  • 구현
    • map 을 활용해 패턴의 빈도수를 저장했습니다.
    • 패턴을 하나씩 for 로 돌리면서 0 의 갯수가 얼마나 패턴에 존재하는지 확인하여
    • 짝수 , 홀수, 등을 비교 해 처리했습니다.

리뷰 요청 사항

  • 다른방법으로 푸셔다면 알려주셨으면 좋겠습니다.

느낀점

  • 2일동안 고민하면서 도움주신 영탁좌 태환좌 감사합니다.
  • 특히 애드 혹 문제에 대해 처음 접했는데 새로워서 그런지 포인트를 잡기 어려웠습니다.

@0takkk
Copy link
Collaborator

0takkk commented Oct 3, 2022

map에 미리 패턴의 빈도수를 저장해두는 방법은 생각을 못했었는데 좋은 것 같습니다.

for (String row : input) {
if (!patternSet.containsKey(row)) {
patternSet.put(row, 1);
} else {
patternSet.put(row, patternSet.get(row) + 1);
}
}

위 코드를 getOrDefault()를 사용하면 아래 코드와 같이 한 줄로 작성할 수 있습니다.

for (String row : input) {
    patternSet.put(row, patternSet.getOrDefault(row, 0) + 1);
}

@ManduTheCat
Copy link
Owner Author

감사합니다 문제풀당시 로직이 머리속에 정리 되지 않아 쭉 생각대로 작성했는데 이렇게 줄일수 있군요 !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants