tic tac toe

 

jooyonee.github.io

제로초님의 웹게임 무료강의를 요즘 듣고 있다고 했자나요?

 

구구단이랑 숫자야구 만들고 그 다음으로 틱택토 게임을 만들어보았숩니다 ^-^

 

지난주부터 한주동안 정말 정신이 없고... 고민도 많고 머리가 무지무지 아팠는데

그와중에 하루만에 끝내버렸어요!!!!!

집중을 하면 저도 할 수 있었습니다,,

 

 

근데 JS.. 생각보다 어렵네요..?

 

EventBubbling, form태그, addEventListener 아주 기본적인건데..... 꽤 어렵네요..? 허허,,

 

개발이 쉬울 거라고 생각하진 않았는데 ㅎ

생각보다 더 어렵군요 ㅎ

 

 

그래도,, 더욱 열심히 해보겠습니다... 그래야만 하구요 ㅠㅠ~ㅎ

 

 

 

요즘 제로초씨의 웹 게임 만들기 (초보) 강의를 듣고 있다!

 

굉장히 간단하고 따라하기 쉬우면서 자바스크립트의 아주 기초적이면서도 중요!!!!한 내용이 잘 녹아있어서 너무 좋다ㅠㅠ

 

이런 강의가 무료라뇨.......

코딩 관련해서는 정말 좋은 학습 자료가 넘쳐나는듯...

 

 

지금 듣고 있는 부분은

웹 게임 중에서 초반부에 있는 "숫자야구"다.

숫자 야구가 뭐지 ㅎ 난 처음 듣는데 ㅎㅎㅎㅋㅋㅋㅋ

 

 

암튼,,

일단 숫자 야구를 하려면 맨 처음에 중복 없는 네자릿수를 랜덤으로 생성해줘야 한다.

 

let random_num_arr = [];
for (i=0; i<4; i++) {
  var num = Math.ceil(Math.random() * 9);
   if (random_num_arr.indexOf(num) === -1) {
    random_num_arr.push(num);
  } else {
    i--;
  }
}

 

찾아보니 이런 아주 유용한 방법이 있더라..?

*주의* else 에서 i를 꼭 '-1' 해줘야 항상 네자릿수가 나온다!!!!

 

 

알아두면 좋을 것 같아서 여기 적어두러왔다 ㅎ

 

얼렁 공부하러 가야지

이진탐색이란걸 공부했다. (하고 있다.)

 

프로그래머스 레벨 3 "등대" 문제를 푸는데

 

알고리즘 짜기는 쉬웠으나....

 

너무 많은 반복문을 사용해서

 

자꾸 시간 초과가 떴다 ㅠㅠ...

 

난 왜이렇게 부족해 아직?!?!?!!!!! 얼른 성장하고싶어 ㅠㅠ

 

for문에 너무나도 익숙한 나.....

 

다른 사람들 잘 쓰는 map, reduce 이런거 좀 잘 활용해야 하는데!!!!!!!!!

 

그래도, 요새 숫자 배열 오름차순/내림차순 과 filter, set 는 잘 응용해서 쓰고 있다! (대견해 ㅎㅎㅎ)

 

 

아무튼 저 "등대" 문제를 푸는데... 시간초과가 (좀 심할 정도로) 떠서

 

어쨌든 이 알고리즘이.. 배열을 탐색하고 확인하는 과정을 계속 반복하는 거니까,,,,

 

효율성을 위해 이 탐색 과정을 줄이면 괜찮지 않을까? 싶어서

 

이진탐색이란걸 발견하게 되었다!

 

 

 

[알고리즘/자바스크립트] Binary Search Algorithm (이진 탐색 알고리즘)

Binary Search(이진탐색) 만약 어떤 친구가 1부터 10까지 중에 숫자 하나를 생각한 다음 우리에게 그 숫자가 뭔지 맞춰보라고 했다고 생각해보자. 이 때 그 숫자를 맞추기 위해 1부터 10까지 하나 하

im-developer.tistory.com

 

 

설명을 읽어보니,, 너무 좋네..?

 

세상엔 정말 똑똑한 사람들이 너무 많어...

 

 

으쓱아.. 좀만 더 기다려.......

 

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

내 풀이

일단 문제를 좀 이상하게 이해한 것 같은데.. 어쨌든 풀었음 ㅎㅎ

<내가 이해한 방식>

- 문제 제한 사항 맨 첫번째를 보면, polynomial에 있는 '수'는 0초과 100미만이라고 되어있다.

나는 이 문장을 polynomial에서 '숫자'에 해당되는, 즉 x의 계수 혹은 상수의 범위가 1부터~ 99까지 라고 이해했다.

(근데 같이 푼 친구에게 물어보니 걔는 polynomial에 있는 덩어리(+연산자로 엮인 하나의 다항식 덩어리)의 수 라고 해석했다.)

 

-또한 3번째 제한사항은 polynomial에서 '숫자'부분을 담당하는 부분은 0~9의 정수로 '이루어'진다고 했으므로

x의 계수, 혹은 상수는 한자릿수 뿐만 아니라, 두자릿 수 일 수 있다고 생각함. (첫번째 제한사항에서 수의 범위가 1~99까지 이므로)

 

그래서 해결한 나의 코드는

-x의 계수 혹은 상수가 한자릿수 뿐만 아니라, 두자릿수 일때도 가능하며

-x의 앞에 0이 들어가도 되지만(제한사항에서는 x앞에 0이 없어야 한다는 것으로 해석했으나, 코드를 짜다보니 '0x'와 같은 것도 처리가 가능하게 짤 수 있었다!)

-polynomial이 빈 문자열이면 안 된다. (빈 문자열 넣으면 'NaN'이라고 나옴 ㅡㅡ)

 

<내가 해결한 방식>

1. 우선 input으로 주어지는 polynomial의 꼬라지를 보니, +연산자로 덩어리가 구분 되었으므로 +를 기준으로 배열을 쪼개준다.

2. 'x'를 포함하는 덩어리만 따로 빈 배열(x_arr)을 생성하고 거기 넣어준다.

3. 상수, 즉 'x'를 포함하지 않는 덩어리들은 상수만 모아두는 배열을 따로 만들어서 거기 넣어준다.

4. x_arr에서 x의 계수는 한자릿수 혹은 두자릿수 이므로, for문으로 요소 하나씩 접근하며 x를 없애줌 + 계수의 합을 구함.

*이때, x의 계수가 '1'이라 '1'이 생략된 경우에는 x앞에 숫자가 아예 없기 때문에 따로 처리해줘야한다.('x'혼자 있으면 계수의 합에 1만 더하는 것으로 처리!)

5. 마지막으로 답을 리턴할때는 조금 지저분하지만 케이스를 분류했다.

---최종 계산한 x 계수의 합이 0이거나 1초과인 수일 때(1이 아닐때)----그 중에서도 상수가 0 일때(' + 0'이 함께 나오면 안 됨)

                                                                ----그 중에서 x의 계수가 0 일때(이때는 상수만 리턴해야함)

---최종 계산한 x 계수의 합이 1일때----그 중에서도 상수가 0일때(' + 0'이 나오면 안 되므로 따로 처리해줌)

 

이런식으로 케이스 분류해서 답을 리턴하도록 해줬다!

 

그리고 진짜 진짜 중요한거... 내가 이걸 못 찾아서 2시간동안 헤맸음 ㅠㅠㅠ.....

 

마지막에 답을 리턴할때 답을 꼭 'String'으로 변환해줘야 한다.................

처음에 문제를 쭉 읽을 때는 '마지막에 문자열로 변환해줘야겠다!'라고 생각했었는데

코드를 짜다보니 새카맣게 잊어버리고.. 다 짜놓고 보니 대체 뭐가 틀렸지? 하면서 절대 안 보임 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

나도 제3자의 눈을 빌려.. 겨우 찾았다 ㅠㅠㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

 

해결

var polynomial = '1 + 0 + x';

var arr = polynomial.split(' + ');
console.log(arr);

var x_arr = [];
var num_arr = [];
    
    for (var i = 0; i < arr.length; i++) {
        if(arr[i].includes('x') === true) {
            x_arr.push(arr[i]);
            } else {
                num_arr.push(arr[i]);
            }
        }

    //계수    
    var x_num = 0;
    for ( var i = 0; i < x_arr.length; i++) {
        if (x_arr[i] === 'x') {
            x_num += 1;
        } else {
        x_arr[i] = x_arr[i].replace('x', "")
        x_num += parseInt(x_arr[i]);
        }
    }

    //상수
    var num = 0;
    for (i = 0; i < num_arr.length; i++) {
        num += parseInt(num_arr[i]);
    }

    
    var answer = '';
    if (x_num != 1) { 
    answer = x_num + 'x' + ' + ' + num;
        if (num === 0) {
            answer = x_num + 'x';
        }
        if (x_num === 0) {
            answer = num;
        }
    } else {
        answer = 'x' + ' + ' + num;
        if (num === 0) {
            answer = 'x';
        }
    }
    console.log(String(answer));

이 코드에서 맨 아래 console.log부분만 return으로 바꿔주고,

맨 위 내가 예시로 입력 값 넣은 var polynomial 부분 제외해서 function 안에 넣어주면 된다!

 

 

끗.

 

 

그나저나 마지막 주 문제들은 상당히 ㅋㅋㅋ 쉽지 않군!

그래도 뭔가 고군분투하면서 배우는게 있으니 너무 재밌당ㅎㅎㅎㅎㅎ

얼른 레벨 2, 3도 고민할 수 있는 능력이 됐으면,,....

 

 

웹 게임을 만들며 배우는 JavaScript(자바스크립트) - 구름EDU

'끝말잇기'부터 '테트리스'까지! 실제로 동작하는 웹 게임을 개발하며 쉽고 재밌게 자바스크립트를 배울 수 있는 강의입니다.

edu.goorm.io

코딩테스트 문제를 100개 정도 풀었다! (다 쉬운 문제긴하지만..ㅎ)

 

이제 만들고 싶은 것도 많고,, 간단한건 도전해보고 싶다는 욕심이 마구마구 샘솟는중....

그래서 맨땅에 헤딩은 조금 시간이 오래걸릴 것 같아서

일단 이 강의를 따라하면서 얻을 건 얻고!! 해볼건 해보고!! 하려고 한다.

 

마침 내가 만들고 싶었던게 웹 게임 이랑 유사한 형식인데.....

(사실 웹 게임 찾다가 발견한 강의임 ㅎ)

이 강의에 나온 예제들 다 만들줄 알면 혼자서 뭔가를 만들어낼 수 있지 않을까?!?!

 

 

가끔 프로그래밍 공부를 하다보면...

이런 강의 따라히기식 방법이 잘못된 것 혹은 지나치게 수동적인 방법이 아닐까하고 걱정이 들 때가 있다.

 

아직 결과물은 얻지 못했지만.... 뭔들 일단 해내는게 중요하지 않은가!!!!!!!!

 

그니까 일단 닥치고 하자 ^^ ㅎ

 

 

[Node.js] 자바스크립트 콘솔에서 입력 받는 방법

🎯 Node.js 콘솔창 입력받기 백준에서 알고리즘 문제를 풀 때 자바스크립트 입력받는 방법을 알아보자! 📝 한 줄 값 입력받기 자바스크립트에서는 readline 모듈을 이용하면 콘솔을 통해 값을 입력

lakelouise.tistory.com

 

Math.floor : 내림

Math.ceil : 올림

Math.max : 최댓값

Math.min : 최솟값

Math.abs : 절댓값

Math.random : 랜덤 수 하나 출력

Math.sqrt : 제곱근

Math.trunc :

+ Recent posts