공부해 codingTest

프로그래머스 JAVA Level 1. 카드 뭉치

러쉬허쉬 2023. 3. 12. 04:10

Level 1. 카드 뭉치

https://school.programmers.co.kr/learn/courses/30/lessons/159994

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 통과

 

2. 통과 코드

 

3. 문제 해석

두 개의 카드 뭉치에서 카드를 뽑아 주어진 goal 배열과 같게 만들어라.

단, 카드 뭉치에서 카드를 꺼낼때 순서대로 꺼내야 하고, 꺼낸 카드는 반드시 사용해야 한다.

 

4. 풀이

(1) 2중 for문을 사용해 goal에 있는 단어가 cards1, cards2에 있는지 비교하고,

     있다면 cards1, cards2에서 해당 단어의 인덱스를 index1, index2에 저장한다.

     이때 index1, index2가 해당 단어의 인덱스보다 크다면 answer = "No"를 저장하고 반복문을 종료한다.

 

     왜냐면 cards1 = {"i", "water", "drink"};, cards2 = {"want", "to"};, goal = {"i", "want", "to", "drink", "water"}; 일때

     goal의 "drink"가 cards1의 "drink"와 같기 때문에 index1은 2이다.

     그다음 goal의 "water"가 cards1의 "water"와 같은데 index1은 2고, "water"의 인덱스는 1이다.

     따라서 카드 뭉치에서 순서대로 뽑아야 한다는 규칙을 어기기때문에 answer = "No"다.

 

(2) 만약 cards1 = {"a", "b", "c"};, cards2 = {"d", "e"};, goal = {"b", "c", "d", "e"}; 일때

     (1)에서 사용한 2중 for문만 으로는 커버가 되지 않는다.

 

     왜냐면 index1, index2를 저장할 때, index1, index2와 같은 단어의 인덱스를 대소비교만하면 오류가 없다.

     "b", "c", "d,", "e"가 모두 goal에서 순서대로 사용되었기 때문이다.

     즉, cards1에서 "a"가 먼저 뽑았음에도 goal에 없기 때문에 규칙을 어긴다.

 

     그러므로 boolean 타입의 배열 check1, check2를 만들고, index1, index2를 저장할 때

     해당 check1, check2의 값을 true로 바꿔준다.

     그리고 2중 for문이 모두 종료되고, check1, check2에 각각 for문을 사용한다.

     만약 check1, check2에서 앞의 요소가 false인데 뒤의 요소가 true라면

     앞의 카드를 뽑았음에도 goal에 없기 때문에 answer = "No"다.