블로그에 코드는 다시는 올리지 않으려고 했는데 에라~ 모르겠다~

  오늘 자주 들르는 커뮤니티에 고민 글이 하나 올라왔다. 고민인즉!!
  전공수업에서 교수님이 C언어 과제를 하나 내 주셨다.

문제> “단어1 단어2 단어3 단어4” 를 입력받으면 스택과 연결리스트를 이용하여          저장한후
         “단어4 단어3 단어2 단어1″의 형태로 출력을 하는 프로그램을 작성하시오.
 
e.g>입력 : I Love You
      출력 : You Love I

  자료구조 수업인 것 같은데 입력받은 문장을 공백을 기준으로 분리해서 스택에 과 연결리스트를 이용해 저장한 후 출력하는 문제이다.

  3년만에 학교를 복학해서 C언어와 자료구조 동강까지 보면서 공부를 해 봐도 풀리지가 않아서 고민 글을 쓰게 된 것이다. 얼마나 고민이 되었을까.. 문제는 안풀리고 마냥 답답했나보다..ㅠㅠ

  정말 도와주고 싶었지만… 코드를 C로 작성해야 한다는 제약사항이!! C언어는 2학년때 이후로 본지가 오래되어서 자주 쓰이는 함수들 이름조차 다 까먹었는데…..;;; 아… 슬프다. 도와줄 방법이 없구나. 문제를 딱 보니 스택은 LIFO(Last In, First Out)형태의 자료구조이니 스택에 먼저 입력받은 문장을 단어로 나누어 넣은 후 스택에 들어있는 단어들을 차례대로 꺼내서 연결리스트에 넣는 문제라는 감은 왔는데….

  그래서 미약하나마 힘이 되고자 가장 손에 익은 언어인 자바로 코드를 만들어서 답변으로 올려 두었다. 사실.. 자바나 C나 문법만 약간 다를뿐.. 내용물은 비슷비슷 할테니 힌트라도 되지 않을까 생각되었다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Stack;

public class Test {
   
    /**
     * 문자배열을 인수로 받아
     * 스택에 넣어 스택을 리턴
     * @param words
     * @return
     */
    public Stack pushStack(String[] words){
        Stack stack = new Stack();
        for(int i = 0; i < words.length; i++){
            stack.push(words[i]);
        }
        return stack;
    }
   
    /**
     * 스택을 인수로 받아
     * 연결리스트에 넣어 연결리스트를 리턴
     * @param stack
     * @return
     */
    public LinkedList addLinkedList(Stack stack){
        LinkedList linkedList = new LinkedList();
        while(!stack.empty()){
            linkedList.add(stack.pop());
        }
        return linkedList;
    }
   
    /**
     * 단어들을 입력받아 공백을 기준으로
     * 문자들을 배열에 저장
     * 배열을 리턴
     * @return
     * @throws IOException
     */
    public String[] inputWords() throws IOException{
        String[] words = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try{
            System.out.print(“입력 : “);
            words = br.readLine().split(” “);
        }catch(IOException e){
            System.out.println(e);
        }finally{
            if(br != null) br.close();
        }
       
        return words;
    }
   
    public static void main(String[] args) throws IOException {
        Test test = new Test();
       
        Stack stack = test.pushStack(test.inputWords());    //문자를 입력받아 스택에 저장
        LinkedList linkedList = test.addLinkedList(stack);    //스택의 값을 연결리스트에 저장
       
        //연결리스트의 값을 차례대로 출력
        System.out.print(“출력 : “);
        for(int i = 0; i < linkedList.size(); i++){
            System.out.print(linkedList.get(i)+” “);
        }
    }

}

  도움이 되었으면 좋겠다. 정말루…;;

  만약 연결리스트와 스택도 직접 구현해서 사용해야 하는 문제라면, 어짜피 책에 간단한 스택과 연결리스트의 예제 소스가 있을테니 그걸 참고하면 될테고.. 문자열을 나누는 sprit()메소드는 C언어에도 비슷한 역할을 하는 함수가 있을테니 그걸 찾아다 쓰면 될 것 같다.

  부디 꼭 성공하세요!! 싸인펜이 응원합니다!!S