250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

셀렉트박스(Select-box)로 스택-큐(Stack-Queue) 변경 가능한 앱 리액트로 만들기 본문

[Snow-ball]프로그래밍(컴퓨터)/미니앱

셀렉트박스(Select-box)로 스택-큐(Stack-Queue) 변경 가능한 앱 리액트로 만들기

Snow-ball 2022. 3. 2. 00:20
반응형

셀렉트 박스에서 스택과 큐를 선택해서 배열의 모양과 값을 변경하는 미니앱을 만들어 봤다. 

아쉬운점도 있지만, 나름 재밌게 만들었다. 좀 더 실력이 쌓이면 세련되게 코드를 짜보고 싶다는 생각이 남는 경험이었다.

 

 

 

코드 : 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import React, { useState } from "react";
 
const StackQueue = () => {
  const [nodeArr, setNodeArr] = useState([]);
  const [index, setIndex] = useState(0);
  const [valueIndex, setValueIndex] = useState(0);
  const [stackAndQueue, setstackAndQueue] = useState("stack");
  const [floatValue, setFloatValue] = useState(false);
  console.log(stackAndQueue);
 
  const style = {
    arrBox: {
      height: "2rem",
      width: "8rem",
      display: "block",
      background: "green",
      textAlign: "center",
      float: floatValue ? "left" : "",
    },
  };
 
  const valueChoice = (e) => {
    if (e.target.value === "stack") {
      setstackAndQueue("stack");
      setFloatValue(false);
      reverseNodeArr(nodeArr, index);
    }
 
    if (e.target.value === "queue") {
      setstackAndQueue("queue");
      setFloatValue(true);
      sortNodeArr(nodeArr, index);
    }
  };
 
  const nodeAdd = () => {
    nodeArr[valueIndex] = index;
    if (stackAndQueue === "stack") {
      reverseNodeArr(nodeArr, index);
    }
    if (stackAndQueue === "queue") {
      sortNodeArr(nodeArr, index);
    }
    setIndex(index + 1);
    setValueIndex(valueIndex + 1);
  };
 
  const nodeDelete = () => {
    nodeArr.shift();
    setValueIndex(valueIndex - 1);
    setNodeArr(nodeArr);
  };
 
  const reverseNodeArr = (arr, index) => {
    let sortArr = [];
    let tmp = 0;
 
    if (index > 0) {
      sortArr = arr;
      for (let i = 0; i < index + 1; i++) {
        for (let j = 0; j < index - i; j++) {
          if (sortArr[j] < sortArr[j + 1]) {
            tmp = sortArr[j];
            sortArr[j] = sortArr[j + 1];
            sortArr[j + 1= tmp;
          }
        }
      }
    }
  };
 
  const sortNodeArr = (arr, index) => {
    let sortArr = [];
    let tmp = 0;
 
    if (index > 0) {
      sortArr = arr;
      for (let i = 0; i < index + 1; i++) {
        for (let j = 0; j < index - i; j++) {
          if (sortArr[j] > sortArr[j + 1]) {
            tmp = sortArr[j];
            sortArr[j] = sortArr[j + 1];
            sortArr[j + 1= tmp;
          }
        }
      }
    }
  };
 
  return (
    <>
      <div>
        자료구조 선택
        <select name="dataStructure" onChange={valueChoice}>
          <option value="stack" defaultValue>
            stack
          </option>
          <option value="queue">queue</option>
        </select>
      </div>
      <div>
        {nodeArr.length === 0 ? (
          <p>현재 노드가 존재하지 않습니다.</p>
        ) : (
          <>
            {nodeArr.map((element) => {
              return (
                <>
                  <div style={style.arrBox}>{element}</div>
                </>
              );
            })}
          </>
        )}
      </div>
      <br />
      <br />
      <div>
        <button onClick={nodeAdd}>노드 추가</button>
        <button onClick={nodeDelete}>노드 제거</button>
      </div>
    </>
  );
};
 
export default StackQueue;
cs

 

 

깃주소 :

https://github.com/akdl911215/Test-Collection/tree/master/storybook/stack-queue

 

GitHub - akdl911215/Test-Collection: test-collection

test-collection. Contribute to akdl911215/Test-Collection development by creating an account on GitHub.

github.com

 

 

 

 

 

 

 

베타존 : 네이버쇼핑 스마트스토어

나를 꾸미다 - 인테리어소품 베타존

smartstore.naver.com

 

반응형
Comments