코딩/2023 JavaScript Console

2023.08.22 / Step 10 [함수] - 코딩 34 일차

헤실 2023. 8. 22. 22:11

함수4_문제01_포인트.html

 

<script>

    /*
        [문제]
            아래 userData는 회원번호와 이름이고,
            pointData는 포인트와 회원번호이다.
            포인트는 여러번 쌓을 수 있고,
            전부 누적해서 합을 구한다.
            포인트 점수가 가장 높은 회원의 이름을 출력하시오.
        [정답]
            이만수 (3점으로 1002번이 가장 높으므로 정답)        
    */
    function json (userData, pointData){
        let user = [];
        let point = [];
        let token = userData.split(",");
        for(let i = 0; i < token.length; i++){
            let temp = token[i].split("/");
            user.push(temp);
        }
        token = pointData.split(",")
        for(let i = 0; i < token.length; i++){
            let temp = token[i].split("/");
            point.push(temp);
        }
        let max = 0;
        let maxid = 0;
        for(let i = 0; i < user.length; i++){
            let count = 0;
            for(let j = 0; j < point.length; j++){
                if(user[i][0] == point[j][1]){
                    count += Number(point[j][0]);
                }
            }
            if(max < count){
                max = count;
                maxid = i;
            }
        }
        return user[maxid][1];
    }
   
   

    let userData = "1001/김철수,";
    userData += "1002/이만수,";
    userData += "1003/이영희";

    let pointData = "1/1001,";
    pointData += "1/1002,";
    pointData += "2/1003,";
    pointData += "1/1001,";
    pointData += "2/1002";  

    let rs = json(userData, pointData);
    document.write("포인트가 가장 높은 회원 = " + rs + "<br>");
   
</script>

 

 


함수4_문제02_숫자검색.html

 

<script>

    /*
        [문제]
            아래 strTest 배열을 검사해서
            숫자가 있는 값을 찾아주는
            함수를 만드시오.
        [정답]
            qwer1234dasd, 1234
    */

    function numbercheck (what){
        let str0 = "0123456789";
        let check = false;
        for(let i = 0; i < what.length; i++){
            for(let j = 0; j < str0.length; j++){
                if(what[i] == str0[j]){
                    check = true;
                    break;
                }
            }
        }
        return check;
    }
    function getanswer (now){
        let temp = [];
        for(let i = 0; i < now.length; i++){
            if(numbercheck(now[i]) == true){
                temp.push(now[i]);
            }
        }
        return temp;
    }


    let strTest = ["qwer1234dasd", "dasdasd", "1234"];

    let temp = getanswer(strTest);
    document.write(temp);

  </script>

 

 


함수4_문제03_타자연습.html

 

<script>

    /*
        [문제]
            철수는 타자연습 게임을 만들기 위해 단어들을 선정했다.
            문제를 단순히 내면 재미없기 때문에 두 글자는 단어대신 * 로 출력하려고 한다.
            * 위치는 랜덤이고, 별은 반드시 두개가 되도록 각 단어들을 만들어서
            새로운 배열에 저장 후 출력하시오.
        [예시]
            h*m*
            *eac*
            spr**ng
            fr*nt*nd
            java*cr*pt
    */  

    function starcheck (str){
        let count = 0;
        for(let i = 0; i < str.length; i++){
            if(str[i] == "*") count++;
        }
        return count;
    }
    function makeword (word){
        let newword = "";
        while(true){
        let r1 = Math.floor(Math.random() * word.length);
        let r2 = Math.floor(Math.random() * word.length);
        for(let i = 0; i < word.length; i++){
        if(i == r1 || i == r2) newword += "*"
        else newword += word[i];
        }
        if(starcheck(newword) == 2) break;
        else newword = "";
    }
        return newword;
    }
    function solution (wordtest){
        let arr = [];
        for(let i = 0; i < wordtest.length; i++){
        arr.push(makeword(wordtest[i]) + "<br>");
    }
        return arr;
    }

    let wordTest = ["html", "react", "spring", "frontend", "javascript"];

    let rs = solution(wordTest);
    document.write("rs =<br> " + rs + "<br>");

  </script>

 

 


함수4_문제04_총합.html

 

<script>

    /*
        [문제]
            아래 데이터는 각각의 회원이 물건을 구입가격들을 기록한 내용이다.
            회원별 구입 총합을 테이블로 만들려고한다.
            데이터는 아래와 같이 나올 수 있도록 result에 저장 후 출력하시오.
            단, \n 은 줄바꿈이다. 구분자를 \n으로 넣으면 잘 잘린다.
        [정답]
            10001,김철수,2670
            10002,이영희,1950
            10003,유재석,4080
            10004,박명수,7130
    */

    function getdatalist (data){
        let datalist = [];
        let token = data.split("\n");
        for(let i = 0; i < token.length; i++){
            let temp = token[i].split("/");
            temp[2] = Number(temp[2]);
            datalist.push(temp);
        }
        return datalist;
    }
    function usercheck (usernumber, resultlist){
        let check = false;
        for(let i = 0; i < resultlist.length; i++){
            if(usernumber == resultlist[i][0]){
            check = true;
            break;
            }
        }
        return check;
    }
    function getresultlist (datalist){
        let resultlist = [];
        for(let i = 0; i < datalist.length; i++){
            if(usercheck(datalist[i][0], resultlist) == false) resultlist.push(datalist[i]);
        }
        gettotal(resultlist, datalist);
        return resultlist;
    }
    function gettotal (resultlist, datalist){
        for(let i = 0; i < resultlist.length; i++){
            let total = 0;
            for(let j = 0; j < datalist.length; j++){
            if(datalist[j][0] == resultlist[i][0]){
                total += datalist[j][2];
            }
            }
            resultlist[i][2] = total;
        }
    }
    function solution (data){
        let datalist = getdatalist(data);
        let resultlist = getresultlist(datalist);
        return resultlist;
    }

    let data ="";
        data += "10001/김철수/600\n";
        data += "10002/이영희/800\n";
        data += "10001/김철수/1400\n";
        data += "10003/유재석/780\n";
        data += "10002/이영희/950\n";
        data += "10004/박명수/330\n";
        data += "10001/김철수/670\n";
        data += "10003/유재석/3300\n";
        data += "10002/이영희/200\n";
        data += "10004/박명수/6800\n";
        data = data.substring(0 , data.length-1); // 마지막 글삭제
   
    let resultlist = solution(data);

    for(let i = 0; i < resultlist.length; i++){
        document.write(resultlist[i] + "<br>");
    }
   
    document.write("<br>");
   
    let rs = [];
    let token = data.split("\n");
    for(let i = 0; i < token.length; i++){
        let temp = token[i].split("/");
        temp[2] = Number(temp[2]);
        rs.push(temp);
    }
   
    let temp = [];
    for(let i = 0; i < rs.length; i++){
        let check = false;
        for(let j = 0; j < temp.length; j++){
        if(rs[i][0] == temp[j][0]) {
            check = true;
            break;    
        }  
    }
    if(check == false) temp.push(rs[i]);
}
    for(let i = 0; i < temp.length; i++){
        let total = 0;
        for(let j = 0; j < rs.length; j++){
            if(temp[i][0] == rs[j][0]) total += rs[j][2];
        }
        temp[i][2] = total;
    }
    for(let i = 0; i < temp.length; i++){
        document.write(temp[i] + "<br>");
    }

</script>

 

 


함수4_문제05_스플릿구현.html

 

<script>

    /*
        [문제]
            문자열의 split() 함수를 직접 구현해보시오.
        [정답]
            ["1001", "1002", "1003", "1004"]
    */
   
    // 기존 split() 함수
    let data1 = "1001,1002,1003,1004";
    let rs1 = data1.split(",");
    document.write(rs1 + "<br>");

    // 내가 만든 함수
    function letsplit (str, whatever){
        let splitdata = [];
        let temp = "";
        for(let i = 0; i < str.length; i++){
            if(str[i] == whatever){
                splitdata.push(temp);
                temp = "";
            } else temp += str[i];
        }
        splitdata.push(temp);
        return splitdata;
    }

    let rs2 = letsplit(data1, ",");
    document.write(rs2 + "<br>");
</script>

 

 


함수4_문제06_장바구니.html

 

<script>

    /*
        [문제1]
          회원별로 아이템 구매목록을 출력하시오.
      [정답1]
          [이만수 ==> 고래밥3,칸쵸1]
          [김철민 ==> 고래밥1]
          [이영희 ==> 고래밥1,새우깡2]
     
      [문제2]
          아이템별로 판매개수를 출력하시오.
      [정답2]
          [고래밥 ==> 5][새우깡 ==> 2][칸쵸 ==> 1]
    */

    function cartdatalist (cartData){
        let datalist = [];
        let token = cartData.split("\n");
        for(let i = 0; i < token.length; i++){
            let temp = token[i].split("/");
            datalist.push(temp);
        }
        return datalist;
    }
    function itemdatalist (itemData){
        let itemdatalist = [];
        let token = itemData.split(",");
        for(let i = 0; i < token.length; i++){
            let temp = token[i].split("/");
            itemdatalist.push(temp);
        }
        return itemdatalist;
    }
    function userdatalist (userData){
        let userdatalist = [];
        let token = userData.split(",");
        for(let i = 0; i < token.length; i++){
            let temp = token[i].split("/");
            userdatalist.push(temp);
        }
        return userdatalist;
    }
    function q1 (itemData, userData, cartData){

        let itemlist = itemdatalist(itemData);
        let userlist = userdatalist(userData);
        let cartlist = cartdatalist(cartData);
        let solution1 = [];
        for(let i = 0; i < userlist.length; i++){
            let temp = [];
            temp.push(userlist[i][1]);
           
            for(let j = 0; j < itemlist.length; j++){
                let count = 0;
                for(let k = 0; k < cartlist.length; k++){
                    if(userlist[i][0] == cartlist[k][0]){
                       if(itemlist[j][0] == cartlist[k][1]){
                        count++;
                       }
                    }
                }
               
               
                temp.push(count);
               
            }
            solution1.push(temp);
        }
        return solution1;
    }
    function dataprint (data){
        for(let i = 0; i < data.length; i++){
            document.write(data[i] + "<br>");
        }
    }
    function letcount (data){
        let totallist = [];
        for(let i = 1; i < data[0].length; i++){
            let total = 0;
            for(let j = 0; j < data.length; j++){
                total += data[j][i];
            }
            totallist.push(total);
        }
        return totallist;
    }
      let itemData = "1001/고래밥,1002/새우깡,1003/칸쵸";
      let userData = "3001/이만수,3002/김철민,3003/이영희";
     
      let cartData = "";
      cartData += "3001/1001\n";
      cartData += "3001/1001\n";
      cartData += "3003/1002\n";
      cartData += "3001/1001\n";
      cartData += "3001/1003\n";
      cartData += "3003/1002\n";
      cartData += "3003/1001\n";
      cartData += "3002/1001\n";

      let rs = q1(itemData, userData, cartData);
      dataprint(rs);
     
      document.write(letcount(rs));

    </script>