[알고리즘] Stack, Queue (7) : 교육과정 설계 (JAVA)

ho's·2022년 6월 11일
0

🎄 교육과정 설계

🎏 문제

🎏 풀이

🏈 STEP0 - 문제 이해

위와 같이 CBA가 첫번째 입력값으로 주어지고,
두번째 입력값이 CDKAE로 주어졌을때, Q.contains() 메소드를 이용한다.

🏈 STEP1 - 비교하기

Q.contains(x)를 하여, Q에 값이 있을 경우, Q의 제일 앞에 있다면 지워준다.

🏈 STEP2 - 비교하기2

Q.contains(x)를 하여, Q에 값이 없을 경우, 그냥 지나친다.

🏈 STEP3 - 비교하기3

Q.contains(x)를 하여, Q에 값이 있을 경우, Q의 제일 앞에 없다면 answer="NO"를 저장한다.

🏈 STEP4 - 수업을 모두 듣지 않았을 경우.

위와 같은 경우, A가 수강되지 않으므로, 예외 처리를 해주어야 한다.

🎏 소스코드

🏈 메인메소드

	public static void main(String[] args){
    	Main42 T = new Main42();
        Scanner sc = new Scanner(System.in);
        String N = sc.nextLine();
        String subject = sc.nextLine();
        System.out.println(T.solution(N, subject));
    }

🏈 solution 메소드

public String solution(String N, String subject){
	
    // answer의 기본 값 "YES"로 두자!
    String answer = "YES";
    // LinkedList를 이용해 Queue저장소를 만들자.
    Queue<Character> Q = new LinkedList<>();
    
    // 첫번째 String N을 char형태로 x에 저장해서 Q에 넣자.
    for(char x: N.toCharArray())
    	Q.offer(x);
        
    // String 형식의 subject를 char형태로 바꿔서 저장한 후,
    // Q가 x를 포함하고 있고, Q에서 꺼냈을 때, x와 일치하지 않으면 return "NO"를 통해 바로 종료해버립시다,
    for(char x:subject.toCharArray()){
    	if(Q.contains(x)){
        	if(x != Q.poll())
            	return "NO";
        }
    }
    
    // 여기서 끝나면 안됩니다. 필수과목을 다 수강하지 않았을 경우도 처리해 줍니다,
    if(!Q.isEmpty())
    	return "NO";
    

}

🏈 전체 소스코드

package algolecture;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main42 {
    public String solution(String N, String subject) {

        String answer = "YES";
        Queue<Character> Q = new LinkedList<>();

        for(char x : N.toCharArray())
            Q.offer(x);
        for(char x : subject.toCharArray()) {
            if (Q.contains(x)) {
                if (x != Q.poll())
                    return "NO";
            }
        }
        if(!Q.isEmpty())
            return "NO";
        return answer;
    }

    public static void main(String[] args) {
        Main42 T = new Main42();
        Scanner sc = new Scanner(System.in);
        String N = sc.nextLine();
        String subject = sc.nextLine();
        System.out.println(T.solution(N ,subject));

    }
}

🏈 나는 어떻게 풀려고 했었나

  • Queue를 2개 만들어서 비교를 하려고 했다.
  • 입력값을 넣을때 배열을 2개 따로 만들어서 split()을 이용해 저장하려고 했다. 메모리 낭비가 심했다.
  • 값을 어떻게 비교하는지 알지 못했다.
  • String answer = ""로 처리하려고 했었다. 이럴 경우 "YES" "NO" 일 경우를 다 생각을 해서 처리해야 하기 때문에 더 어려워졌을것 같다.
profile
그래야만 한다

0개의 댓글