반응형

반응형

프로그래머스 코딩테스트 124 나라의 숫자 : https://school.programmers.co.kr/learn/courses/30/lessons/12899

문제보기


124나라의 숫자 어떻게 풀어야할까?

자연수 n을 124 나라에서 사용하는 숫자로 바꾸는 문제를 해결하기 위해서는 아래와 같이 생각할 수 있어요.

124 나라에서는 1, 2, 4만 사용하므로 10진법 수를 3진법처럼 생각하여 변환해봅시다.

단, 3으로 나누어 떨어지는 경우 0 대신 4를 사용합니다.

따라서 while 문을 사용하여 n을 3으로 나눈 나머지에 따라 124 나라에서 사용하는 숫자로 변환합니다.

이때 3으로 나누어 떨어지는 경우 n을 1만큼 감소시키고 124 나라에서 사용하는 수에 따라 0 대신 4를 사용합니다.

자 여기까지 어느정도의 힌트를 드렸으니 혼자 풀어보실 의향이 있으시다면 풀어보시면 됩니다.

 

만약 정답을 보고싶으시다면 아래를 참고해주세요.

 


function solution(n) {
    let answer = ''; // 변환한 124 나라에서 사용하는 숫자를 저장할 변수
    while(n > 0){ // n이 0보다 크면 계속 반복
        switch(n % 3){ // n을 3으로 나눈 나머지에 따라 분기 처리
            case 1:
                answer = '1' + answer; // 나머지가 1이면 1을 추가
                n = Math.floor(n / 3); // n을 3으로 나눈 몫으로 업데이트
                break;
            case 2:
                answer = '2' + answer; // 나머지가 2이면 2를 추가
                n = Math.floor(n / 3); // n을 3으로 나눈 몫으로 업데이트
                break;
            case 0:
                answer = '4' + answer; // 나머지가 0이면 4를 추가
                n = Math.floor(n / 3) - 1; // n을 3으로 나눈 몫에서 1을 빼서 업데이트
                break;
        }
    }
    return answer; // 변환한 124 나라에서 사용하는 숫자를 반환
}
반응형
반응형

JavaScript에서 Scope(스코프)는 변수가 유효한 범위를 나타내는 개념입니다.
Scope는 변수가 선언되었을 때 해당 변수가 어디에서 접근 가능한지를 결정합니다.
JavaScript는 두 가지 Scope 타입을 가지고 있습니다

  • Global Scope
  • Local Scope

Global Scope


Global Scope(전역 스코프)는 프로그램 전체에서 접근 가능한 스코프입니다.
전역 스코프에서 선언된 변수는 어느 곳에서든지 접근할 수 있습니다.
전역 스코프에서 변수를 선언하려면, 함수나 블록 안에서 선언하는 것이 아니라 스크립트의 가장 바깥쪽에 선언해야 합니다.

// Global Scope에서 변수를 선언합니다. 
var globalVariable = 'Hello World!'; 
function sayHello() { 
  console.log(globalVariable); 
} 
sayHello(); // 'Hello World!'

위의 예시에서 globalVariable 변수는 함수 안에서 선언되지 않았으므로 전역 스코프에서 선언된 것입니다. 함수 sayHello()에서도 이 변수를 접근할 수 있습니다.

Local Scope


Local Scope(지역 스코프)는 함수나 블록 안에서 선언된 변수가 해당 함수나 블록 안에서만 접근 가능한 스코프입니다. 함수나 블록 안에서 선언된 변수는 해당 함수나 블록 밖에서는 접근할 수 없습니다.

function sayHello() {
// Local Scope에서 변수를 선언합니다. 
    var localVariable = 'Hello World!';
    console.log(localVariable); 
} 
sayHello(); // 'Hello World!' 
console.log(localVariable); // ReferenceError: localVariable is not defined 

위의 예시에서 localVariable 변수는 함수 sayHello() 안에서 선언되었으므로 해당 함수 안에서만 접근할 수 있습니다. 함수 밖에서 이 변수를 접근하려고 하면 ReferenceError가 발생합니다.

변수 Shadowing


JavaScript에서는 Local Scope 안에서 동일한 이름을 가진 변수를 다시 선언할 수 있습니다. 이를 변수 Shadowing이라고 합니다. Local Scope 안에서 새로운 변수가 선언되면, 이 변수는 해당 Local Scope에서만 유효하며, 해당 Scope에서는 이 변수의 이름으로 원래의 변수에 접근할 수 없습니다.

var globalVariable = 'Hello World!'; 
function sayHello() { 
    // Local Scope에서 globalVariable 변수를 shadowing합니다. 
    var globalVariable = 'Hi there!'; 
    console.log(globalVariable); 
} 
sayHello(); // 'Hi there!' 
console.log(globalVariable); // 'Hello World!' 

위의 예시에서 sayHello() 함수 안에서 globalVariable 변수를 shadowing하여 새로운 값을 할당했습니다. 함수 밖에서 globalVariable 변수는 여전히 'Hello World!' 값을 유지하고 있습니다.
하지만 함수 안에서 선언한 globalVariable 변수는 함수 밖에서는 접근할 수 없습니다. 함수 밖에서 globalVariable 변수를 사용하려면, 함수 안에서 globalVariable 변수를 shadowing하지 않도록 조심해야 합니다.

var globalVariable = 'Hello World!';

function sayHello() {  
var globalVariable = 'Hi there!'; // 변수 shadowing  
console.log(globalVariable); // 'Hi there!'  
}

sayHello(); // 'Hi there!'  
console.log(globalVariable); // 'Hello World!'

위의 예시에서 sayHello() 함수 안에서는 globalVariable 변수를 새로 선언하여 'Hi there!' 값을 할당했습니다.
함수 밖에서는 여전히 'Hello World!' 값을 유지하고 있습니다.

자바스크립트에서 스코프는 변수와 함수의 유효 범위를 결정하는 중요한 개념입니다.
이를 잘 이해하고 활용하면 코드의 가독성과 유지보수성을 높일 수 있습니다.
스코프의 개념은 자바스크립트뿐만 아니라 다른 프로그래밍 언어에서도 공통적으로 사용되는 개념이기 때문에 꼭 기억하고 학습하시길 바랍니다.

반응형
반응형

OSI 7 Layer이란?

네트워크 프로토콜과 통신을 7계층으로 표현한 것입니다.

이는 프로토콜을 기능별로 나누고 계층별로 구분하는데 이는 벤더간 호환성을 위한 표준을 필요하기때문에 나누게되었고 이는 쉬운 접근성으로 기술의 발전을 이루어냈습니다.

 


Application (Layer 7) 응용서비스 HTTP , SMTP
Presentation (Layer 6) 인코딩 / 암호화 / 압축 등 데이터의 변형이 이루어짐
Session (Layer 5) TCP / IP 통신 연결을 수립 / 유지 / 중단
Transport (Layer 4)  TCP / UDP 
Network (Layer 3)  IP통신, 라우팅
Data Link (Layer 2)  이더넷, 랜ㄷ카드, Mac 통신, 에러검출
Physical (Layer 1)  네트워크 하드웨어 전송 기술에 대한 프로토콜

Physical

장치와 통신매체 사이의 비정형 데이터의 전송을 담당합니다.

전송되는 방법이나 제어신호, 기계적 속성등을 정의합니다.

케이블, 인터페이스, 허브, 리피터등이 이에 속합니다.

 


Data Link

동일 네트워크 내에서 데이터를 전송하고 링크를 통해서 연결을 설정하고 관리합니다.

물리계층에서 발생할 수 있는 오류를 감지하고 수정합니다.


Network

다른 네트워크로 데이터를 전송할 수 있습니다. IP(Internet Protocol)주소로 통신을 합니다.

출발지 IP에서 목적지 IP로 데이터 통신할 때 중간에서 라우팅을 처리합니다.

데이터가 큰 경우 분할하거나 전송 후 목적지에서 재 조립하여 메세지를 구현합니다.


Transport

호스트 간의 데이터를 전송합니다.

IP통신 이후에 서비스를 정의해줍니다.

오류 복구 및 흐름제어를 해주고 완벽한 데이터 전송을 보장합니다.

 


Session

로컬 및 원격 애플리케이션간의 IP/ Port연결을 관리해주는 단계입니다.


Presentation

사용자 프로그램과 네트워크 형식간에 데이터를 변환하여 표현과 독립성을 제공합니다.

인코딩, 디코딩, 암호화, 압충 등등


Application

사용자와 가장 밀접한 소프트웨어입니다.

이메일 서비스 SMTP나 파일전송 FTP 등등

반응형

'컴퓨터 구조' 카테고리의 다른 글

컴퓨터 구조  (0) 2021.03.16
반응형

컴퓨터의 구성은 하드웨어와 소프트웨어로 이루어져있다.

 

하드웨어 소프트웨어
입력장치 - 키보드, 마우스, 터치스크린 등등
처리장치 - 주 기억장치, 중앙처리장치 (제어장치, 연산장치)
출력장치 - 프린터, 모니터, 스피커
보조기억장치 - 자기 디스크, CD-ROM, Memory
시스템 소프트웨어 -  쉽게 이야기하면 운영체제(OS)
(하드웨어와 응용소프트웨어의 호환성을 담당)
응용 소프트웨어 - 우리가 사용하는 엑셀, PPT, 워드 등등

 

정보와 데이터의 차이 

 

데이터 정보
정보를 작성하기 위해 필요한 자료나 정보를 처리하거나 전송할때 좀 더 편리한 형태로 바뀌어진 자료.
즉, 정보의 원재료
정보는 가공된 데이터

 

데이터 표현 및 단위

수치 데이터 : 연산용 데이터

비 수치 데이터 : 입출력용 데이터

특수 문자 : 입출력/연산용 데이터

 

 

Bit 0 과 1 ( 2진수 체계 )
Byte 1byte = 8bit
Word 기계에 따라 상이하지만 1word = 32bit 나 64bit
KB, KiloByte 1KB = 1024 Byte
MB, MegaByte 1MB = 1024 KB
GB, GigaByte 1GB = 1024 MB
TB, TeraBtye 1TB = 1024 GB

 

 


 

중앙 처리 장치 ( Central Processing Unit )

MPU - CPU를 LSI(고밀도 집적회로)화 한 일종의 통합 장치

CISC ( Complex Instruction Set Computer ) : 기본적인 동작들이 반복이 되는데 이러한 반복적이고 동일한 행동들을

일일이 소프트웨어하지않고 하드웨어화 하겠다 라는 개념,

RISC ( Reduced Instruction Set Computer ) : CISC의 반대되는 개념

 

 

 

 

 

주변 장치 ( Peripheral Device )

 

기억장치 (Memory Unit)

  • RAM (Random Access Memory)
    • DRAM ( Dynamic RAM )
    • SRAM ( Static RAM )
  • ROM ( Read Only Memory )

 

보조기억장치 ( Auxiliary memory device )

 

SSD ( Solud State Drive )

USB 기억장치

SD card

메모리스틱 등등

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'컴퓨터 구조' 카테고리의 다른 글

[네트워크] OSI 7 Layer 모델  (0) 2021.04.02
반응형
ㅇㅇ

파이썬의 정규식 중 간단하고 가장 많이 사용되는 정규식을 말씀드리려고 합니다.

또 한 예제를 통해 re ( regular expression) 사용법도 살펴보시면 좋습니다.

 

 

1. ' . ' → 하나의 문자를 의미합니다.

  • 예를들어 L.VE 라고 한다면 이는 LIVE , LOVE등이 가능할 것 같습니다.
1
2
3
4
5
6
7
8
9
import re
#★★★★★★★★★★          BLOG          ★★★★★★★★★★
= re.compile("L.VE")
= p.match("LOVE")
if m :
    print("해당 {0}은 정규식표현의 글자에 포함할 수 있습니다.".format(m.string))
else :
    print("해당 글자는 매칭되지 않습니다.")
 

2. ' ^ ' → 문자열의 시작을 의미합니다.

  • 예를들어 ^AR 이라고 한다면 이는 ARCHER, ARK, ARRIVE 등이 가능합니다.
1
2
3
4
5
6
7
8
import re
#★★★★★★★★★★          BLOG          ★★★★★★★★★★
= re.compile("^AR")
= p.match("ARK")
if m :
    print("해당 {0}은 AR의 시작부분을 포함하고 있습니다.".format(m.group()))
else :
    print("해당 글자는 매칭되지 않습니다.")

3. ' $ ' → 하나의 문자를 의미합니다.

  • 마찬가지로 예를들어 ER$ 라고한다면 이는 LOSER, WINNER 등이 가능합니다.
1
2
3
4
5
6
7
8
import re
#★★★★★★★★★★          BLOG          ★★★★★★★★★★
= re.compile("ER$")
= p.search("LOSER")
if m :
    print("해당 {0}은 ER의 마지막부분을 포함하고 있습니다.".format(m.group()))
else :
    print("해당 글자는 매칭되지 않습니다.")

 

이와같이 사용이 가능합니다.

import re를 이용한 정규식 사용방법

1. p = re.compile( "원하는 정규식 작성" )

2. m = p.match( "비교할 문자열")

MATCH()는 주어진 문자열이 처음부터 일치하는지 확인을 합니다.

또는

2. m = p.search( "비교할 문자열" )

SEARCH()는 주어진 문자열 중에 일치하는것이 있는지 확인합니다.

 

반응형
반응형

MS-SQL, ORACLE, MYSQL등 우리는 전부 RDBMS를 사용합니다.

RDBMS에서 R은 Relational을 의미하는데요, 모든 테이블이 그런것은 아니지만

몇몇의 테이블들은 서로 관계를 가지고 있습니다.

 

우리는 이렇게 관계를 가지고 있는 테이블들 사이에서 합집합, 교집합, 차집합을 구할 수 있는데요.

UNION 

두개의 SELECT결과를 합칠 수 있습니다.

합치는 과정에서 중복은 제거가 됩니다.

 

SQL문 

1
2
3
4
5
SELECT playerID
FROM players
UNION
SELECT playerID
FROM salary

이렇게 사용이 가능하며 2가지 주의사항이 있습니다.

 

1. 2개의 SELECT구문의 컬럼의 개수가 같아야 합니다.

2. 각 컬럼의 데이터 타입이 같아야 합니다.

 

 

 

각각의 구문의 교집합이 필요하거나 차집합이 필요하다면 UNION 자리에 대신

INTERSECT (교집합)

EXCEPT (차집합)

을 작성하여 SQL문을 실행시킬 수 있습니다.

반응형
반응형

데이터베이스 정규화?

데이터베이스에는 정규화 이론이라는 DB설계 이론이 있습니다.

정규화 이론은 RDB (Relational Database)를 효율적으로 잘 다루는데에 있어서 꼭 필요하며

관계형 모델을전제로 구축된 DB설계 이론입니다.

2020/08/27 - [DB] - [DBMS] RDBMS와 DBMS의 차이점 / SQL이란?

 

[DBMS] RDBMS와 DBMS의 차이점 / SQL이란?

DBMS와 RDBMS의 개념 우리는 DBMS가 무엇인지 알고있습니다. 그렇다면 RDBMS는 무엇일까요? Relational Database Managenent System으로 쉽게 생각해 테이블 기반의 DBMS라고 생각하면 됩니다. DBMS와 RDBMS의 차..

runcoding.tistory.com

 

예를들어 RPG게임을 바탕으로 설명을 드리도록 할게요.

PlayerID name class level inventory
321331 런코딩 암살자 132 부패의 물약*5 , 처형인의 대검 , 무한의 대검, 천갑옷, 신속의 장화
321332 런코딩 부캐 사제 77 불타는 향로, 미카엘의 도가니, 부패의 물약*3, 구원

RPG게임에 일부분이라고 가정해봅시다. 이렇게 인벤토리라는 컬럼을 만들고 그 안에 모든 아이템을 때려박는다면

어떨까요?

 

위 테이블처럼 인벤토리에 모든 보유 아이템을 1개의 컬럼에 때려박는다면, 그리고 그러한 플레이어들이 100만 명 가까이 있다면, 우리는 playerID를 통해 해당 ROW를 찾고 그 ROW안에서 Inventory컬럼안에 있는 내용들을 전부다 

스트링으로 받아온 뒤, ,(쉼표) 를 통하여 아이템들을 나누고  등등 해야할 일들이 정말 많을것 입니다.

상당히 비효율적이게 되는것이죠.

 

우리는 정규화를 기준으로 이를 어떻게 바꿀 수 있을까요?

1차원 적으로 생각해본다면

PlayerID name class level Itemcode itemname itemcount
321331 런코딩 암살자 132 13 부패의 물약 5
321331 런코딩 암살자 132 17 처형인의 대검  1
321331 런코딩 암살자 132 21 무한의 대검 1
321331 런코딩 암살자 132 24 천갑옷 1
321331 런코딩 암살자 132 26 신속의 장화 1
321332 런코딩 부캐 사제 77 31 불타는 향로 1
321332 런코딩 부캐 사제 77 11 미카엘의 도가니 1
321332 런코딩 부캐 사제 77 13 부패의 물약 3
321332 런코딩 부캐 사제 77 66 구원 1

이런식으로 바꿀 수 있습니다.

근데 이렇게 모든 아이템들을 따로 나누고 나니.. 중복된 데이터들이 상당히 많습니다.

PlayerID부터 level까지 여러개의 레코드들이 중복됩니다.

이를 해소하기 위해서는 테이블을 여러개로 나누고 각각 primary key와 foreign key를 활용해서 관계형 데이터베이스를 작성할 수 있습니다.

PlayerID name class level
321331 런코딩  암살자 132
321332 런코딩 부캐 사제 77
PlayerID Itemcode itemcount
321331 13 5
321331 17 1
321331 21 1
321331 24 1
321331 26 1
321332 31 1
321332 11 1
321332 13 3
321332 66 1
itemcode itemname
13 부패의 물약
17 처형인의 대검 
21 무한의 대검
24 천갑옷
26 신속의장화
31 불타는향로
11 미카엘의 도가니
66 구원

이렇게 3개의 테이블로나누게되면 비로소 RDB를 효율적으로 잘 다룰 수 있게 되는것 입니다.

 

반응형
반응형

Constraint란?

테이블 생성 시에 Constraint, 즉 제약조건을 사용해서 입력하는 자료에 대해 제약을 정해줄 수 있습니다.

이때 정해진 제약에 따라서 데이터가 입력되는데 , 제약에 맞지 않다면 자료 입력이 거부되면서 오류가 납니다.

RDMBS에서는 데이터의 무결성을 위해 5가지 제약조건을 제공하고 있습니다.

NOT NULL 값이 NULL이 아닌값을 의미합니다.
UNIQUE 유일한 값으로 존재해야한다는 것을 의미합니다.
PRIMARY KEY NOT NULL과 UNIQUE를 합친것으로, 테이블에서 대표되는 컬럼을 의미합니다.
FOREIGN KEY '참조하는 테이블에서 존재하는 값만 사용 가능'을 의미합니다.
CHECK 주어진 조건에 해당하는 값만 입력가능을 의미합니다.

 

 

NOT NULL

특정 컬럼의 값이 반듯이 입력되어야 한다고 지정하는 것입니다.
NOT NULL은 테이블에 데이터를 INSERT 할 때 값이 없어서는 안 되는 부분입니다.
NOT NULL이기 때문에 NULL값도 들어갈 수 없습니다.

UNIQUE

특정 칼럼의 값이 중복되지 않도록 하는 것입니다.
UNIQUE는 해당 테이블에 있어서 존재하는 값이 유일해야 합니다.
만약 INSERT, UPDATE시에 동일한 데이터를 집어넣으려 한다면 오류가 납니다.
하지만 NULL값에 대해서는 제약이 적용되지 않기 때문에 여러 개의 NULL값을 넣을 수 있습니다.

PRIMARY KEY

NOT NULL과 UNIQUE 제약조건을 합친 제약조건입니다.
한 개의 테이블에 한 칼럼만 생성이 가능하며, NULL값이 있으면 안 되고 해당 칼럼의 데이터는 중복되면 안 됩니다.
PRIMARY KEY는 하나의 테이블에 있는 데이터들을 식별하기 위한 기준으로 인식되는 제약조건입니다.

FOREIGN KEY

해당 칼럼에 참조하는 테이블로부터 존재하는 값들만 사용한다는 의미의 제약조건입니다.
만약에 참조하는 테이블에 해당하는 값이 없을 때에는 INSERT, UPDATE시에 오류를 발생시킵니다.
외래 키(FOREIGN KEY)로 두 테이블이 부모 자식 테이블로 관계를 맺고 있을 시에는
자식 테이블이 참조하는 데이터는 부모 테이블에서 삭제가 불가능합니다.

CHECK

조건에 부합하는 데이터만 입력이 가능하도록 하는 제약 조건입니다.
조건에는 기본 연산자나 비교 연산자 등이 사용 가능합니다.

반응형

+ Recent posts