프로그래머스

[프로그래머스] 카드 뭉치 (JAVA)

코 밑 2024. 3. 30. 04:21
Contents

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

 

프로그래머스

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

programmers.co.kr

 

 

일단 문제 길이가 너무너무 길다. 읽다가 이해하는 데 시간 다 간다 그냥

아무튼 문제를 요약하자면

cards1과 cards2의 문자열들로 goal에 있는대로 나와야한다.

단, 밑장빼기는 안된다.

 

2번 케이스를 보면

cards1[] =  ["i", "water", "drink"]

cards2[] = ["want", "to"]

로 "drink"가 "water" 뒤에 있다

이러면 "i want to drink water"를 밑장빼기가 아닌 이상 만들어 낼 수가 없다

 

코드 보시죠

class Solution { // 카드 뭉치
	public String solution(String[] cards1, String[] cards2, String[] goal) {
		String answer = "Yes";
		int c1 = 0, c2 = 0; // c1 = cards1의 인덱스, c2 = cards2의 인덱스

		for (int i = 0; i < goal.length; i++) {
			// c1과 cards1의 길이비교, 값비교
			if (c1 < cards1.length && goal[i].equals(cards1[c1])) {
				c1++;
			} else if (c2 < cards2.length && goal[i].equals(cards2[c2])) {
				c2++;
			} else { // c1, c2 둘다 안되면 No 반환
				return "No";
			}
		}

		return answer;
	}
}

 

c1, c2로 cards1과 cards2의 인덱스 번호를 0으로 초기화해주고 시작했습니다.

만약 c1(c2)이 cards1.length(cards2.length)보다 작고 goal[i]와 문자열이 일치한다면 인덱스 번호를 올려줍니다

그렇지 않다면 바로 "No"를 반환하죠

무사히 goal.length의 크기만큼 반복을 끝냈다면 answer의 초기값인 "Yes"가 반환됩니다

 

쬐큼 어려웠음 설명이 어렵네요