라라리라

2023.08.17 / Step 9 [문자열] - 코딩 29 일차 본문

코딩/2023 JavaScript Console

2023.08.17 / Step 9 [문자열] - 코딩 29 일차

헤실 2023. 8. 17. 20:25

문자열4_개념01_삭제.html

 

<script>

    /*
        [문제]
            stno는 학생번호 배열이다.
            stname은 학생이름 배열이다.
            두 배열은 한 세트이다.
            랜덤으로 학생번호를 선택하고 해당번호의 학생 데이터를 삭제하시오.
        [예시]
            r = 1002
            stno = [1001, 1003, 1004]
            stname = ["김철수" , "신정아" , "이영희"]    
    */

    let stno   = [   1001,     1002,    1003,     1004];
    let stname = ["김철수", "이만수", "신정아", "이영희"];

    let r = Math.floor(Math.random() * stno.length);
    document.write("r = " + stno[r] + "<br>");

    stno.splice(r , 1);
    stname.splice(r , 1);

    document.write("stno = " + stno + "<br>");
    document.write("stname = " + stname + "<br>");

</script>

 

 


문자열4_개념02_자르기1.html

 

<script>

    /*
        [개념] 문자열 자르기1
            let 변수 = "문자열";
           
            [1] 변수 = 변수.substring(시작인덱스, 마지막인덱스 + 1);
                특정 구간의 문자열을 잘라준다.
            [2] 변수 = 변수.substring(시작인덱스);
                시작인덱스부터 문자열의 끝까지 잘라준다.
    */

    // 아래 문구에서 "java"를 잘라내 출력하시오.
    let text = "hello,javascript";
    let rs1 = text.substring(6, 10);
    document.write(rs1 + "<br>");
   

    // 아래 문구에서 "s jo"를 잘라내 출력하시오.
    let test = "hi my name is john";
    let rs2 = test.substring(12, 16);
    document.write(rs2 + "<br>");
   
    // 아래 문구에서 5678 대신 ****로 표현하시오.
    // 정답) 010-1234-****
    let phoneNum = "010-1234-5678";
    phoneNum = phoneNum.substring(0, phoneNum.length - 4);
    phoneNum += "****";
    document.write(phoneNum + "<br>");

</script>

 

 


문자열4_개념03_자르기2.html

 

<script>

    /*
        [개념] 문자열 자르기2
            let 변수 = "문자열";
            변수 = 변수.split(구분자);

            문자열을 구분자를 기준으로 잘라서 배열로 만들어준다.
    */

    let text = "One,Two,Three,Four,Five";
    let arr = text.split(",");
   
    for(let i=0; i<arr.length; i++) {
        document.write(arr[i] + " ");
    }
    document.wrtie("<br>");

    /*
        [문제]
            input에 저장된 암호를 글자의 길이만큼
            password배열에 한 글자씩 저장 후 출력하시오.
        [정답]
            password = q,w,e,r,1,2,3,4
    */

    let input = "qwer1234";
    let password = [];

    password = input.split("");
    document.write(password);

</script>        

 

 


문자열4_문제04_형변환.html

 

<script>

    /*
        [문제]
            arr배열에 각 점수를 저장하고 출력하시오.
        [정답]
            arr = 11,100,89
    */

    let str = "11/100/89";
    let arr = [];

    let token = str.split("/");
    for(let i=0; i<token.length; i++) {
        arr.push(Number(token[i]));
    }

    document.write("arr = " + arr + "<br>");

</script>

 

 


문자열4_문제05_형변환.html

 

<script>

    /*
        [문제]
            이름은 name배열에 성적은 score배열에
            각각 저장 후 출력하시오.
        [정답]
            name = 김철수,이만수,이영희
            score = 87,42,95
    */

    let str = "김철수/87,이만수/42,이영희/95";
    let name = [];
    let score = [];

    let token = str.split(",");
    for(let i = 0; i < token.length; i++){
        let temp = token[i].split("/");
        name.push(temp[0]);
        score.push(temp[1]);
       
    }
    document.write("name = " + name + " <br>score = " + score + "<br>");


</script>

 

 


문자열4_문제06_형변환.html

 

<script>

    /*
        [문제]
            score배열의 각 점수를 /(슬러시)를 구분자로
            하나의 문자열로 연결하고 출력하시오.
        [정답]
            str = 11/100/89
    */

    let score = [11, 100, 89];
    let str = "";

    for(let i = 0; i < score.length; i++){
        str+= score[i];
        str += "/";
    } str = str.substring(0, str.length - 1);
    document.write(str);

</script>

 

 


문자열4_문제07_형변환.html

 

<script>

    /*
        [문제]
            이름과 성적을 아래와 같이 슬러시(/)와 콤마(,)로
            하나의 문자열로 연결한 후 출력하시오.
        [정답]
            str = 김철수/87,이만수/42,이영희/95
    */

    let name = ["김철수", "이만수", "이영희"];
    let score = [87, 42, 95];
    let str = "";

    for(let i = 0; i < score.length; i++){
        str+= name[i];
        str+= "/"
        str+= score[i];
        str+= ","
    }   str = str.substring(0, str.length - 1);
    document.write(str);

</script>

 

 


문자열4_문제08_형변환.html

 

<script>

    /*
        [문제]
            아래 데이터에서 꼴등을 삭제 후
            다시 하나의 문자열로 변경 후 출력하시오.
        [정답]
            str = 김철수/87,이영희/95
    */

    let str = "김철수/87,이만수/42,이영희/95";

    let name = [];
    let score = [];
   
    let token = str.split(",");
    let min = 100;
    let minid = 0;
    for(let i = 0; i < token.length; i++){
        let temp = token[i].split("/");
        name.push(temp[0]);
        score.push(temp[1]);
        if(score[i] < min) {
            min = score[i];
            minid = i;
        }
    }
    name.splice(minid, 1);
    score.splice(minid, 1);
    document.write("name =" + name + "<br>");
    document.write("score = " + score + "<br>");
    let rs = ""
    for(let i = 0; i < name.length; i++){
        rs += name[i];
        rs += "/";
        rs += score[i];
        rs += ",";
    } rs = rs.substring(0, rs.length - 1);
    document.write("str =" + rs + "<br>");



</script>

 

 


문자열4_문제01_합격.html

 

<script>

    /*
        [문제]
            아래는 학생과 점수 데이터이다.
            시험점수는 60점이상 합격이다.
           
            합격한 사람  점수를 문자열에 저장해서 출력하시오.
            단, 데이터구분자는 ,(콤마)를 중간에 삽입한다.
        [정답]
            result = 92,63
    */

    let scoreList = [12, 92, 54, 63];
    let result = "";
    let temp = [];
    for(let i = 0; i < scoreList.length; i++){
        if(scoreList[i] >= 60){
            temp.push(scoreList[i]);
        }
    }
    document.write("temp = " + temp + "<br>");
    for(let i = 0; i < temp.length; i++){
        result += temp[i];
        result += ",";
    }
    document.write(result.substring(0, result.length - 1));


</script>

 

 


문자열4_문제02_형변환.html

 

<script>

    /*
        [문제]
            text는 학생점수를 기록한 데이터이다.
            전체 평균과 일등의 점수를 출력하시오.
        [정답]
            평균 = 30.2
            일등 점수 = 80
    */

    let str = "13,32,80,3,23";
   
    let token = str.split(",");
    for(let i = 0; i < token.length; i++){
        token[i] = Number(token[i]);
    }
    let max = 0;
    let maxid = 0;
    let total = 0;
    for(let i = 0; i < token.length; i++){
        if(max < token[i]){
            max = token[i];
            maxid = i;
        }
        total += token[i];
    }
    let avg = total / token.length;
    let first = token[maxid];

    document.write("평균 = " + avg +"<br>");
    document.write("일등 점수 = " + first + "<br>");
   
</script>

 

 


문자열4_문제03_나이.html

 

<script>

    /*
        [문제]
            아래 주민번호를 가진 사람의
            나이와 성별을 구하시오.
        [정답]
            38세
            남성    
    */

    let jumin = "850430-1012940";

    let age = 2023 - (Number(jumin.substring(0, 2)) + 1900);

    let a = "";
    if(jumin[7] == 1) a = "남성";
    else if(jumin[7] == 2) a = "여성";

    document.write("나이 = " + age +"<br>");
    document.write("성별 = " + a +"<br>" );

   

   

</script>

 

 


문자열4_문제04_단어교체.html

 

<script>

    /*
        [문제]
            text변수의 내용을 변경하려 한다.
            change변수의 앞부분은 교체할 단어이고, 뒷부분은 삽입할 단어이다.
            text변수의 내용을 변경하시오.
            단, replace함수를 사용하지 마시오.
        [정답]
            text = "Life is too short." (변경 전)          
            text = "Life is too long."  (변경 후)    
    */

    let text = "Life is too short.";
    let change = "short,long";
    let tail = text.substring(text.length - 1, text.length);
   
    let token = text.split(" ");
    let token2 = change.split(",");
   
    for(let i = 0; i < token.length; i++){
        let check = false;
        for(let j = 0; j < token[i].length; j++){
            let count = 0;
            for(let k = 0; k < token2[0].length; k++){
                if(token[i][j + k] == token2[0][k]) count++;
            }
            if(count == token2[0].length){
                check = true;
            }
        }
        if(check == true){
            token[i] = token2[1];
        }
    }
    let r = ""
    for(let i = 0; i < token.length; i++){
        r += token[i];
        if(i < token.length - 1){
        r += " ";
    }
    }
    r+= tail
    document.write(r)
   
   
</script>

 

 


문자열4_문제05_단어부분검색.html

 

<script>

    /*
        [문제]
            arr배열은 단어들이 모여있는 배열이다.
            search는 검색하고 싶은 단어이다.
            arr배열에서 해당 단어를 검색해서 출력하시오.
            단, 부분 검색도 되어야한다.
        [정답]
            school, teacher, child    
    */

    let arr = ["school", "teacher", "child","father", "love"];

    let search = "ch";

    for(let i = 0; i < arr.length; i ++){
        let check = false;
        for(let j = 0; j < arr[i].length - search.length + 1; j++){
            let count = 0;
            for(let k = 0; k < search.length; k++){
                if(arr[i][j + k] == search[k]) count++
            }
        if(count == search.length) {
            check = true;
            document.write(arr[i] + " ");
            break;
        }
        }
    }

</script>

 

 


문자열4_문제06_대소문자.html

 

<script>

    /*
        [문제]
            아래 dbId와 logId가 서로 일치하는지 검사하시오.
            단, 대소문자를 구분하지 않는다.
            즉, A나 a나 서로 같은 것이다.
        [정답]  
            일치한다.
    */

    let dbId = "q1W2E3r4";
    let logId = "q1w2e3R4";

    // 힌트
    let str0 = "0123456789";
    let str1 = "abcdefghijklmnopqrstuvwxyz";
    let str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   
    let count = 0;

    for(let i = 0; i < logId.length; i++){
        let check = false;
        for(let j = 0; j < str0.length; j++){
            if(logId[i] == str0[j]) {
                check = true;
                break;
            }
        }
        if(check) {
            if(logId[i] == dbId[i]) count++;
        }
        else {
            let log = 0;
            let db = 0;
            for(let k = 0; k < str1.length; k++){
                if(logId[i] == str1[k] || logId[i] == str2[k]){
                    log = k;
                }
                if(dbId[i] == str1[k] || dbId[i] == str2[k]){
                    db = k;
                }
            }
            if(log == db) count++;
        }
    }
    if(count == logId.length) document.write("일치한다. <br>");
    else document.write("일치하지않는다<br>");
   
   
</script>

 

 


문자열4_문제07_말하기수열.html

 

<script>

    /*
        [문제]
            다음은 읽고, 말하기 수열의 규칙이다.
   
            1, 11, 12, 1121, 122111, 112213

            첫번째 수열 : 1
            두번째 수열 : 1이 1개 = 11
            세번째 수열 : 1이 2개 = 12
            네번째 수열 : 1이 1개, 2가 1개 = 1121
            다섯번째 수열 : 1이 2개, 2가 1개, 1이 1개 = 122111
            여섯번째 수열 : 1이 1개, 2가 2개, 1이 3개 = 112213  
        [정답]
            1
            11
            12
            1121
            122111
            112213
    */

    let n = "1";
    for(let i = 0; i < 6; i++){
        document.write(n + "<br>");
        let temp = "";
        let count = 1;
        for(let j = 0; j < n.length; j++){
        if(j + 1 < n.length && n[j] == n[j + 1]) count++;
        else {
            temp += n[j];
            temp += count;
            count = 1;
        }
        }
        n = temp;
    }
   

</script>

 

 


문자열4_문제08_상품매출.html

 

<script>

    /*
        [문제]
            member는 회원목록이다. 번호와 아이디가 기록되어있다.
            item은 쇼핑몰 판매상품이다. 상품이름과 가격이 기록되어있다.
            order는 오늘 주문 목록이다. 주문한 회원아이디와 아이템이름
            그리고 주문개수가 기록되어있다.
            오늘의 매출을 출력하시오.
        [정답]
            33200    
    */

    let member = "qwer1234,pythongood,testid";
    let item = "사과,1100/바나나,2000/딸기,4300";
    let order = "qwer1234,사과,3/phthongood,바나나,2/qwer1234,딸기,5/testid,사과,4";

    let mem = []; // 1. 배열화
    let it = [];
    let ord = [];
    let token = member.split(",");
    for(let i = 0; i < token.length; i ++){
        mem.push(token[i]);
    }
    token = item.split("/");
    for(let i = 0; i < token.length; i++){
        it.push(token[i].split(","));
    }
    token = order.split("/");
    for(let i = 0; i < token.length; i++){
        ord.push(token[i].split(","));
    }
//===================================================================================
   
    let total = 0;      // 2. 매출구하기
    for(let i = 0; i < mem.length; i++){
        for(let j = 0; j < it.length; j++){
            for(let k = 0; k < ord.length; k++){
                if(mem[i] == ord[k][0]){    // (1) member 리스트와 order 리스트에서의 아이디가 동일하고,
                    if(ord[k][1] == it[j][0]){ // (2) order 리스트와 item 리스트에서의 상품명이 일치할때,
                        total += Number(ord[k][2]) * Number(it[j][1]);
        // (3) order리스트의 수량과 item 리스트의 가격값을 숫자화 하고, 그 값의 곱을 total 변수에 더한다.
                    }
                }
            }
        }
    }
//====================================================================================

    document.write("total " + total + "<br>"); // 3. 출력
   
   
</script>

 

 


문자열4_문제09_상품취소.html

 

<script>

    /*
        [문제]
            member는 회원목록이다. 번호와 아이디가 기록되어있다.
            item은 쇼핑몰 판매상품이다. 상품이름과 가격이 기록되어있다.
            order는 오늘 주문 목록이다. 주문한 회원 아이디와 아이템 이름 그리고 주문개수가 기록되어있다.
            cancel은 주문취소 목록이다. 취소한 회원 아이디와 아이템 이름 그리고 주문개수가 기록되어있다.
            오늘의 매출을 출력하시오.
        [정답]
            7700    
    */

    let member = "qwer1234,pythongood,testid";
    let item   = "사과,1100/바나나,2000/딸기,4300";
    let order  = "qwer1234,사과,3/phthongood,바나나,2/qwer1234,딸기,5/testid,사과,4";
    let cancel = "qwer1234,딸기,5/phthongood,바나나,2";

    let itemList = [];
    let orderList = [];
    let cancelList = [];

    let memberList = member.split(",");
    let token = item.split("/");
    for(let i = 0; i < token.length; i++){
        let temp = token[i].split(",");
        itemList.push(temp);
    } token = order.split("/");
    for(let i = 0; i < token.length; i ++){
        let temp = token[i].split(",");
        orderList.push(temp);
    } token = cancel.split("/");
    for(let i = 0; i < token.length; i++){
        let temp = token[i].split(",");
        cancelList.push(temp);
    }
    let total = 0;
    for(let i = 0; i < memberList.length; i++){
        for(let j = 0; j < itemList.length; j++){
            let count = 0;
            for(let k = 0; k < orderList.length; k++){
                if(memberList[i] == orderList[k][0]){
                    if(itemList[j][0] == orderList[k][1]) count += orderList[k][2];
                }
            }
            for(let k = 0; k < cancelList.length; k++){
                if(memberList[i] == cancelList[k][0]){
                    if(itemList[j][0] == cancelList[k][1]) count -= cancelList[k][2];
                }
            }
            total += count * itemList[j][1];
        }
    }
    document.write("total = " + total + "<br>");


</script>

 

 


문자열4_문제10_상품통계.html

 

<script>

    /*
        [문제]
            member는 회원목록이다.
            item은 쇼핑몰 판매상품이다.
            order는 오늘 주문목록이다.
            회원별 아이템 주문개수를 출력하시오.
        [정답]
            이만수: 고래밥 3
            김철민: 고래밥 1 칸쵸 1
            이영희: 새우깡 2 칸쵸 1    
    */

    let member  = "3001/이만수,3002/김철민,3003/이영희";
    let item    = "1001/고래밥,1002/새우깡,1003/칸쵸";
    let order   = "3001,1001/3001,1001/3003,1002/3002,1003/3001,1001/3003,1002/3003,1003/3002,1001";

    let memberList = [];
    let itemList = [];
    let orderList = [];
 
    let token = member.split(","); // 1. 배열화
    for(let i = 0; i < token.length; i++){
        let temp = token[i].split("/");
        memberList.push(temp);
    } token = item.split(",");
    for(let i = 0; i < token.length; i++){
        let temp = token[i].split("/");
        itemList.push(temp);
    } token = order.split("/");
    for(let i = 0; i < token.length; i++){
        let temp = token[i].split(",");
        orderList.push(temp);
    }
    let rsList = [];
    for(let i = 0; i < memberList.length; i++){
        let temp = [memberList[i][1]];
        for(let j = 0; j < itemList.length; j++){
            let count = 0;
            for(let k = 0; k < orderList.length; k++){
                if(memberList[i][0] == orderList[k][0]){
                    if(itemList[j][0] == orderList[k][1]) count++;
                }
            }
            temp.push(count);
        }
        rsList.push(temp);
    }
    //================================= 2.출력식
    for(let i = 0; i < rsList.length; i++){
        document.write(rsList[i][0] + ": ");
        for(let j = 0; j < itemList.length; j++){
            if(rsList[i][j + 1] > 0){
            document.write(itemList[j][1] + " " + rsList[i][j + 1] + " ");
        }
        }
        document.write("<br>");
    }

</script>

 

 


문자열4_문제11_숫자검색.html

 

<script>

    /*
        [문제]
            철수는 arr배열에서 숫자 검사를 해야한다.
            각 단어를 검사해서 해당 메시지 중 하나를 출력하시오.
        [정답]
            문자만 있다
            숫자만 있다
            문자와 숫자가 섞여있다.    
    */

    let arr = ["adklajsiod", "123123", "dasd12312asd"];
    let msg = ["문자만 있다", "숫자만 있다", "문자와 숫자가 섞여있다."];
   
    let str = "0123456789";
    let str1 = "qwertyuiopasdfghjklzxcvbnm";
    let str2 = "QWERTYUIOPASDFGHJKLZXCVBNM";

   
    for(let i = 0; i < arr.length; i++){
        let info = 2;
        let count = 0;
    for(let j = 0; j < arr[i].length; j++){
    for(let k = 0; k < str.length; k++){
        if(arr[i][j] == str[k]) count++;
    }
    }
    if(count == arr[i].length) info = 1;
    else if(count == 0) info = 0;
    document.write(msg[info] + "<br>");
    }


</script>