코딩/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>