화면구현/HTML

중복체크

psys 2020. 6. 25. 10:10
728x90

중복체크는 로또에서 가장 많이 사용된다.

 

로또 만들기

1) 로또 숫자가 들어 갈 배열 생성

    var v_lottoNums = [];
더보기
<meta charset="UTF-8">
<script>
    var v_lottoNums = [];
</script>

2) 로또 숫자 생성 할 함수 구현

    function f_ranNum(p_start, p_end){
        return Math.round(Math.random()*(p_end-p_start))+p_start;
    }
더보기
<meta charset="UTF-8">
<script>
    var v_lottoNums = [];
    function f_ranNum(p_start, p_end){
        return Math.round(Math.random()*(p_end-p_start))+p_start;
    }
</script>

3) 숫자를 생성하고 배열에 집어넣기

    for(var i=1;i<=6;i++){
        v_lottoNums[v_lottoNums.length]=f_ranNum(1,45);
    }
더보기
<meta charset="UTF-8">
<script>
    var v_lottoNums = [];
    function f_ranNum(p_start, p_end){
        return Math.round(Math.random()*(p_end-p_start))+p_start;
    }
    for(var i=1;i<=6;i++){
        v_lottoNums[v_lottoNums.length]=f_ranNum(1,45);
    }
</script>

4) 반복문 생성

언제 중복된 숫자가 몇 번 발생할지 알 수 없으므로 반복문의 횟수를 정할 수 없음

 

    for(;"로또번호발생은무한루핑";){
    
    }
더보기
<meta charset="UTF-8">
<script>
    var v_lottoNums = [];
    function f_ranNum(p_start, p_end){
        return Math.round(Math.random()*(p_end-p_start))+p_start;
    }
    for(;"로또번호발생은무한루핑";){
    
        }
    }
    alert(v_lottoNums);
</script>

5) 종료조건

무한루핑을 사용할 땐 서버프로그램이 아니면 꼭 종료조건을 생각해야함

        if(v_lottoNums.length==6) break;
더보기
<meta charset="UTF-8">
<script>
    var v_lottoNums = [];
    function f_ranNum(p_start, p_end){
        return Math.round(Math.random()*(p_end-p_start))+p_start;
    }
    for(;"로또번호발생은무한루핑";){
        if(v_lottoNums.length==6) break;
        }
    }
    alert(v_lottoNums);
</script>

6) 랜덤숫자를 변수에 넣어줌

        var v_num = f_ranNum(1,45);
더보기
<meta charset="UTF-8">
<script>
    var v_lottoNums = [];
    function f_ranNum(p_start, p_end){
        return Math.round(Math.random()*(p_end-p_start))+p_start;
    }
    for(;"로또번호발생은무한루핑";){
        if(v_lottoNums.length==6) break;
        var v_num = f_ranNum(1,45);
        }
    }
    alert(v_lottoNums);
</script>

7) 값체크

배열에 넣기 전에 배열에 이미 같은 값이 존재하는지 체크

        for(var i=0;i<v_lottoNums.length;i++){
            if(v_lottoNums[i]==v_num){
                alert("같은 값이 존재합니당");
            }else{
                alert("같은 값이 없엇");
            }
        }
더보기
<meta charset="UTF-8">
<script>
    var v_lottoNums = [];
    function f_ranNum(p_start, p_end){
        return Math.round(Math.random()*(p_end-p_start))+p_start;
    }
    for(;"로또번호발생은무한루핑";){
        if(v_lottoNums.length==6) break;
        var v_num = f_ranNum(1,45);
        for(var i=0;i<v_lottoNums.length;i++){
            if(v_lottoNums[i]==v_num){
                alert("같은 값이 존재합니당");
            }else{
                alert("같은 값이 없엇");
            }
        }
    }
    alert(v_lottoNums);
</script>

for문 안의 ifelse문은 이상해!!

>> 같은 값이 없다는 가정

    var v_check = false;
더보기
<meta charset="UTF-8">
<script>
    var v_lottoNums = [];
    function f_ranNum(p_start, p_end){
        return Math.round(Math.random()*(p_end-p_start))+p_start;
    }
    var v_check = false;
    for(;"로또번호발생은무한루핑";){
        if(v_lottoNums.length==6) break;
        var v_num = f_ranNum(1,45);
        for(var i=0;i<v_lottoNums.length;i++){
            if(v_lottoNums[i]==v_num){
                alert("같은 값이 존재합니당");
            }else{
                alert("같은 값이 없엇");
            }
        }
    }
    alert(v_lottoNums);
</script>

>> 

            if(v_lottoNums[i]==v_num){
                v_check=true; // 없다고 가정했는데 있음
                break; // 같은 값이 있으면 더이상 체크 할 필요가 없음
            }
더보기
<meta charset="UTF-8">
<script>
    var v_lottoNums = [];
    function f_ranNum(p_start, p_end){
        return Math.round(Math.random()*(p_end-p_start))+p_start;
    }
    var v_check = true;
    for(;"로또번호발생은무한루핑";){
        if(v_lottoNums.length==6) break;
        var v_num = f_ranNum(1,45);
        for(var i=0;i<v_lottoNums.length;i++){
            if(v_lottoNums[i]==v_num){
                v_check=true;
                break;
            }
        }
    }
    alert(v_lottoNums);
</script>

>> 같은 값이 없을 때 곧 v_check가 false일때만 배열에 값을 넣음

        if(!v_check){
            v_lottoNums[v_lottoNums.length]=v_num;
        }
더보기
<meta charset="UTF-8">
<script>
    var v_lottoNums = [];
    function f_ranNum(p_start, p_end){
        return Math.round(Math.random()*(p_end-p_start))+p_start;
    }
    var v_check = true;
    for(;"로또번호발생은무한루핑";){
        if(v_lottoNums.length==6) break;
        var v_num = f_ranNum(1,45);
        for(var i=0;i<v_lottoNums.length;i++){
            if(v_lottoNums[i]==v_num){
                v_check=true;
                break;
            }
        }
        if(!v_check){
            v_lottoNums[v_lottoNums.length]=v_num;
        }
    }
    alert(v_lottoNums);
</script>

>> 완성

배열 중복된값 없을때까지~

더보기
<!DOCTYPE html>
<meta charset="UTF-8">
<script>
    // 중복 체크 로직은 무지 중요합니다. 아주 익숙해져야 함.
    // 안되면 이해 될때까지 외워서....
    // 66~100     (0~34) + 66 
    var v_lottoNums = []; // 로또번호 담을 빈 배열
    function f_ranNum(p_start, p_end) {
        return Math.round(Math.random() * (p_end - p_start)) + p_start;
    }
    // 언제 중복된 숫자가 몇번 발생할지 알 수 없으므로
    // 반복문의 횟수를 정할 수 없음
    // 무한루핑사용할 땐 서버프로그램이 아니면 꼭 종료조건을 생각해야함
    for (; "로또번호발생은무한루핑";) {
        if (v_lottoNums.length == 6) { break; }
        var v_num = f_ranNum(1, 45);  // 랜덤 숫자 발생
        //배열에 넣기 전에 배열에 이미 같은 값이 존재하는지 체크

        var v_check = false;  //  같은 값이 없다고 가정

        for (var i = 0; i < v_lottoNums.length; i++) {
            if (v_lottoNums[i] == v_num) {
                v_check = true;     // 없다고 가정했는데 있음!
                break;              // 같은 값이 있으면 더 이상 체크할 필요없음
            }
        }
        // 같은 값이 없을때 곧 v_check가 false일때만 배열에 값을 넣음!
        // v_check가 true일때는 아무일도 하지 않음!
        if (!v_check) {
            v_lottoNums[v_lottoNums.length] = v_num;
        }
    }
    alert(v_lottoNums);  // 숫자 6개 확인
</script>

 

예쁘게예쁘게~~

<style>
    .cl_num{
        display: inline-block;
        width: 50px;
        height: 50px;
        border: 2px solid coral;
        border-radius: 50% 50%;
        text-align: center;
        background-color: coral;
        line-height: 50px; /* 글자 수직중앙정렬 */
        color: white;
        font-weight: bold;
    }
</style>
<body>
    <input type="button" value="금주의 당첨 예상번호는?" onclick="f_lotto()"><br><br>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
</body>
더보기
<!DOCTYPE html>
<meta charset="UTF-8">
<style>
    .cl_num{
        display: inline-block;
        width: 50px;
        height: 50px;
        border: 2px solid coral;
        border-radius: 50% 50%;
        text-align: center;
        background-color: coral;
        line-height: 50px; /* 글자 수직중앙정렬 */
        color: white;
        font-weight: bold;
    }
</style>
<body>
    <input type="button" value="금주의 당첨 예상번호는?" onclick="f_lotto()"><br><br>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
</body>
<script>
    // 중복 체크 로직은 무지 중요합니다. 아주 익숙해져야 함.
    // 안되면 이해 될때까지 외워서....
    // 66~100     (0~34) + 66 
    var v_lottoNums = []; // 로또번호 담을 빈 배열
    function f_ranNum(p_start, p_end) {
        return Math.round(Math.random() * (p_end - p_start)) + p_start;
    }
    // 언제 중복된 숫자가 몇번 발생할지 알 수 없으므로
    // 반복문의 횟수를 정할 수 없음
    // 무한루핑사용할 땐 서버프로그램이 아니면 꼭 종료조건을 생각해야함
    for (; "로또번호발생은무한루핑";) {
        if (v_lottoNums.length == 6) { break; }
        var v_num = f_ranNum(1, 45);  // 랜덤 숫자 발생
        //배열에 넣기 전에 배열에 이미 같은 값이 존재하는지 체크

        var v_check = false;  //  같은 값이 없다고 가정

        for (var i = 0; i < v_lottoNums.length; i++) {
            if (v_lottoNums[i] == v_num) {
                v_check = true;     // 없다고 가정했는데 있음!
                break;              // 같은 값이 있으면 더 이상 체크할 필요없음
            }
        }
        // 같은 값이 없을때 곧 v_check가 false일때만 배열에 값을 넣음!
        // v_check가 true일때는 아무일도 하지 않음!
        if (!v_check) {
            v_lottoNums[v_lottoNums.length] = v_num;
        }
    }
    // alert(v_lottoNums);  // 숫자 6개 확인
</script>
태그에 접근하는 속성 innerHTML
id, name없이!

1) 로또 함수구현

    function f_lotto(){

    }
더보기
<!DOCTYPE html>
<meta charset="UTF-8">
<style>
    .cl_num{
        display: inline-block;
        width: 50px;
        height: 50px;
        border: 2px solid coral;
        border-radius: 50% 50%;
        text-align: center;
        background-color: coral;
        line-height: 50px; /* 글자 수직중앙정렬 */
        color: white;
        font-weight: bold;
    }
</style>
<body>
    <input type="button" value="금주의 당첨 예상번호는?" onclick="f_lotto()"><br><br>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
</body>
<script>
    // 중복 체크 로직은 무지 중요합니다. 아주 익숙해져야 함.
    // 안되면 이해 될때까지 외워서....
    // 66~100     (0~34) + 66 
    var v_lottoNums = []; // 로또번호 담을 빈 배열
    function f_ranNum(p_start, p_end) {
        return Math.round(Math.random() * (p_end - p_start)) + p_start;
    }
    // 언제 중복된 숫자가 몇번 발생할지 알 수 없으므로
    // 반복문의 횟수를 정할 수 없음
    // 무한루핑사용할 땐 서버프로그램이 아니면 꼭 종료조건을 생각해야함
    for (; "로또번호발생은무한루핑";) {
        if (v_lottoNums.length == 6) { break; }
        var v_num = f_ranNum(1, 45);  // 랜덤 숫자 발생
        //배열에 넣기 전에 배열에 이미 같은 값이 존재하는지 체크

        var v_check = false;  //  같은 값이 없다고 가정

        for (var i = 0; i < v_lottoNums.length; i++) {
            if (v_lottoNums[i] == v_num) {
                v_check = true;     // 없다고 가정했는데 있음!
                break;              // 같은 값이 있으면 더 이상 체크할 필요없음
            }
        }
        // 같은 값이 없을때 곧 v_check가 false일때만 배열에 값을 넣음!
        // v_check가 true일때는 아무일도 하지 않음!
        if (!v_check) {
            v_lottoNums[v_lottoNums.length] = v_num;
        }
    }
    // alert(v_lottoNums);  // 숫자 6개 확인
</script>

2) 같은 클래스로 설정한 것에 접근하는 방법

얘는 배열방식으로 접근 가능(elements)

    var v_divs = document.getElementsByClassName("cl_num");
더보기
<!DOCTYPE html>
<meta charset="UTF-8">
<style>
    .cl_num{
        display: inline-block;
        width: 50px;
        height: 50px;
        border: 2px solid coral;
        border-radius: 50% 50%;
        text-align: center;
        background-color: coral;
        line-height: 50px; /* 글자 수직중앙정렬 */
        color: white;
        font-weight: bold;
    }
</style>
<body>
    <input type="button" value="금주의 당첨 예상번호는?" onclick="f_lotto()"><br><br>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
</body>
<script>
    // 중복 체크 로직은 무지 중요합니다. 아주 익숙해져야 함.
    // 안되면 이해 될때까지 외워서....
    // 66~100     (0~34) + 66 
    var v_lottoNums = []; // 로또번호 담을 빈 배열
    function f_ranNum(p_start, p_end) {
        return Math.round(Math.random() * (p_end - p_start)) + p_start;
    }
    // 언제 중복된 숫자가 몇번 발생할지 알 수 없으므로
    // 반복문의 횟수를 정할 수 없음
    // 무한루핑사용할 땐 서버프로그램이 아니면 꼭 종료조건을 생각해야함
    for (; "로또번호발생은무한루핑";) {
        if (v_lottoNums.length == 6) { break; }
        var v_num = f_ranNum(1, 45);  // 랜덤 숫자 발생
        //배열에 넣기 전에 배열에 이미 같은 값이 존재하는지 체크

        var v_check = false;  //  같은 값이 없다고 가정

        for (var i = 0; i < v_lottoNums.length; i++) {
            if (v_lottoNums[i] == v_num) {
                v_check = true;     // 없다고 가정했는데 있음!
                break;              // 같은 값이 있으면 더 이상 체크할 필요없음
            }
        }
        // 같은 값이 없을때 곧 v_check가 false일때만 배열에 값을 넣음!
        // v_check가 true일때는 아무일도 하지 않음!
        if (!v_check) {
            v_lottoNums[v_lottoNums.length] = v_num;
        }
    }
    // alert(v_lottoNums);  // 숫자 6개 확인
    var v_divs = document.getElementsByClassName("cl_num");
    function f_lotto(){
        
    }
</script>

3) 배열 요소값을 div에 넣어주기

        for (var i = 0; i < v_lottoNums.length; i++) {
            v_divs[i].innerHTML = v_lottoNums[i]; 
        }
더보기
<!DOCTYPE html>
<meta charset="UTF-8">
<style>
    .cl_num {
        display: inline-block;
        width: 50px;
        height: 50px;
        border: 2px solid coral;
        border-radius: 50% 50%;
        text-align: center;
        background-color: coral;
        line-height: 50px;
        /* 글자 수직중앙정렬 */
        color: white;
        font-weight: bold;
    }
</style>

<body>
    <input type="button" value="금주의 당첨 예상번호는?" onclick="f_lotto()"><br><br>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
</body>
<script>
    // 중복 체크 로직은 무지 중요합니다. 아주 익숙해져야 함.
    // 안되면 이해 될때까지 외워서....
    // 66~100     (0~34) + 66 
    var v_lottoNums = []; // 로또번호 담을 빈 배열
    function f_ranNum(p_start, p_end) {
        return Math.round(Math.random() * (p_end - p_start)) + p_start;
    }
    // 언제 중복된 숫자가 몇번 발생할지 알 수 없으므로
    // 반복문의 횟수를 정할 수 없음
    // 무한루핑사용할 땐 서버프로그램이 아니면 꼭 종료조건을 생각해야함
    for (; "로또번호발생은무한루핑";) {
        if (v_lottoNums.length == 6) { break; }
        var v_num = f_ranNum(1, 45);  // 랜덤 숫자 발생
        //배열에 넣기 전에 배열에 이미 같은 값이 존재하는지 체크

        var v_check = false;  //  같은 값이 없다고 가정

        for (var i = 0; i < v_lottoNums.length; i++) {
            if (v_lottoNums[i] == v_num) {
                v_check = true;     // 없다고 가정했는데 있음!
                break;              // 같은 값이 있으면 더 이상 체크할 필요없음
            }
        }
        // 같은 값이 없을때 곧 v_check가 false일때만 배열에 값을 넣음!
        // v_check가 true일때는 아무일도 하지 않음!
        if (!v_check) {
            v_lottoNums[v_lottoNums.length] = v_num;
        }
    }
    // alert(v_lottoNums);  // 숫자 6개 확인
    var v_divs = document.getElementsByClassName("cl_num");
    function f_lotto() {
        for (var i = 0; i < v_lottoNums.length; i++) {
            v_divs[i].innerHTML = v_lottoNums[i]; 
        }
    }
</script>

 

완성~~

더보기
<!DOCTYPE html>
<meta charset="UTF-8">
<style>
    .cl_num {
        display: inline-block;
        width: 50px;
        height: 50px;
        border: 2px solid coral;
        border-radius: 50% 50%;
        text-align: center;
        background-color: coral;
        line-height: 50px;
        /* 글자 수직중앙정렬 */
        color: white;
        font-weight: bold;
    }
</style>

<body>
    <input type="button" value="금주의 당첨 예상번호는?" onclick="f_lotto()"><br><br>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
    <div class="cl_num">?</div>
</body>
<script>
    // 중복 체크 로직은 무지 중요합니다. 아주 익숙해져야 함.
    // 안되면 이해 될때까지 외워서....
    // 66~100     (0~34) + 66 
    var v_lottoNums = []; // 로또번호 담을 빈 배열
    function f_ranNum(p_start, p_end) {
        return Math.round(Math.random() * (p_end - p_start)) + p_start;
    }
    // 언제 중복된 숫자가 몇번 발생할지 알 수 없으므로
    // 반복문의 횟수를 정할 수 없음
    // 무한루핑사용할 땐 서버프로그램이 아니면 꼭 종료조건을 생각해야함
    for (; "로또번호발생은무한루핑";) {
        if (v_lottoNums.length == 6) { break; }
        var v_num = f_ranNum(1, 45);  // 랜덤 숫자 발생
        //배열에 넣기 전에 배열에 이미 같은 값이 존재하는지 체크

        var v_check = false;  //  같은 값이 없다고 가정

        for (var i = 0; i < v_lottoNums.length; i++) {
            if (v_lottoNums[i] == v_num) {
                v_check = true;     // 없다고 가정했는데 있음!
                break;              // 같은 값이 있으면 더 이상 체크할 필요없음
            }
        }
        // 같은 값이 없을때 곧 v_check가 false일때만 배열에 값을 넣음!
        // v_check가 true일때는 아무일도 하지 않음!
        if (!v_check) {
            v_lottoNums[v_lottoNums.length] = v_num;
        }
    }
    // alert(v_lottoNums);  // 숫자 6개 확인
    var v_divs = document.getElementsByClassName("cl_num");
    function f_lotto() {
        for (var i = 0; i < v_lottoNums.length; i++) {
            v_divs[i].innerHTML = v_lottoNums[i]; 
        }
    }
</script>

'화면구현 > HTML' 카테고리의 다른 글

함수리턴  (0) 2020.06.25
재귀호출  (0) 2020.06.25
[JavaScript] Random  (0) 2020.06.24
오버플로우  (0) 2020.06.24
Position2  (0) 2020.06.23