[99클럽 코테 스터디] 11일차 TIL - 카드 뭉치
배열을 이용한 구현 문제입니다.goal에 있는 단어를 모두 가지고 있는지 확인하기 위해, cards1과 cards2 배열을 앞으로 순회하며 확인합니다.cards1과 cards2 에 현재 goal의 단어가 없다면, "no"를 반환합니다.만약 goal을 끝까지 순회했다면, "Yes"를 반환합니다.
배열을 이용한 구현 문제입니다.goal에 있는 단어를 모두 가지고 있는지 확인하기 위해, cards1과 cards2 배열을 앞으로 순회하며 확인합니다.cards1과 cards2 에 현재 goal의 단어가 없다면, "no"를 반환합니다.만약 goal을 끝까지 순회했다면, "Yes"를 반환합니다.
설명은 길지만 결국 문제는 최소 한 개의 의상을 입으면서, 각 의상 종류들의 조합을 구하는 문제이다.각 의상 종류의 갯수를 구한 후, 계산해놓은 의상 종류의 합을 전부 다 곱해주면 된다.즉 HashMap의 key가 의상 종류가 되고, value가 해당 의상 종류의 갯수가 된다.곱해주는 동안 유의할 점은 의상을 입을 때 입지 않는 종류가 있을 수 있다는 것이고,최소 한 개의 의상은 입어야 한다는 점이다. hashmap의 value를 곱할 때, 안 입는 경우를 조합에 더하기 위해 value + 1을 하여 곱해야 하고,모두 안 입는 경우는 없기 때문에 -1을 하면 끝이다 !
공백문자가 연속해서 나올 수 있으니, 공백 한 칸으로 문자열을 split 하면 안 된다.해도 되지만, 문자열의 마지막에 연속된 공백문자가 온다면, 문자열 배열로 split되지 않는 문제가 발생한다.그렇게 되면 추후 마지막 공백들의 갯수를 세는 로직이 필요하기 때문에 다른 방식으로 풀게 되었다.
문제 요약을 하자면, Strings 배열을 각 원소 String의 n번째 글자로 정렬을 하고, 같다면 사전 순으로 정렬을 하는 것이다.stream을 사용하여 쉽게 구현하였다.
가장 먼저 떠오른 풀이 방법은 2차원 배열의 원소들을 조건에 맞게 채우고,주어진 n, left, right 을 이용하면 return의 대상이 되는 2차원 배열의 첫 좌표와 마지막 좌표를 알 수 있다.2차원 배열의 첫 좌표와 마지막 좌표를 loop를 돌아 1차원 배열을 만드는 방법을 생각하였다. 제한사항을 고려하면 NxN의 2차원 배열을 만들어야 하는데, n의 크기가 10의 7제곱이다.가로 세로의 크기가 10의 7제곱이고 전체 loop를 돈다면 10의 14제곱만큼 loop를 돌며 시간초과 에러가 날 것이라고 생각했다. 다른 방법을 찾아보니 i행과 i열의 모든 빈 칸을 숫자 i로 채운다고 한다.생각해보면 좌표의 값은 행과 열 중 더 큰 숫자가 해당 좌표의 값이 된다고 생각했다.그럼 O(NxN) 이었던 시간 ..