일기 48

(JavaScript) 대충 만든 자판

https://school.programmers.co.kr/learn/courses/30/lessons/160586 1. 각 알파벳 별로 입력에 필요한 가장 적은 횟수를 찾는다.1-1. 알파벳의 최소 입력 횟수를 저장하기 위한 short 객체를 선언한다.1-2. 각 keymap을 순회하며 알파벳 입력에 필요한 횟수를 short 객체에 저장한다.1-3. 만약 알파벳 입력에 필요한 횟수가 short 객체에 저장된 횟수보다 크다면 무시한다.2. 최소한의 횟수로 문자열을 입력한다.2-1. 문자열을 순회하며 short객체에서 입력에 필요한 횟수를 찾아 결과에 더한다. 1번 과정에서 N^2의 속도가 걸리게 되지만, keymap의 갯수가 최대 100개, keymap의 원소의 길이가 최대 100개 이므로 가능하다고 보..

일기 2024.12.11

OSI 모델

OSI 모델에 대해 알아보려한다.0. OSI 모델은 무엇일까? OSI(Open Systems Interconnection) Model은 표준 프로토콜을사용하여 다양한 통신 시스템이 통신 할 수 있도록 국제표준화기구에서 만든 개념 모델이다. 서로 다른 컴퓨터가 서로 통신할 때 필요한 약속이라고 할 수 있다. 컴퓨터끼리 통신을 할 때, 서로가 이 약속을 지키고 있다고 가정함으로써 모든 컴퓨터에서 동일한 처리 과정을 거치는 프로그램을 기동할 수 있게 된다. 만약 이러한 표준 약속이 없다면 통신으로 주고받은 신호가 도대체 무슨 내용을 담고 있는 것인지 알 수 없을 것이다.  OSI 모델은 일반적으로 7개의 계층으로 나뉜다. OSI 모델의 각 계층은 특정한 작업을 처리하고 그 위와 아래의 계층과 통신한다. 사용자..

일기 2024.12.10

(JavaScript) 문자열 나누기

내가 싫어하는 문자열 문제 먼저 한 블럭을 분해하는 부분을 작성한다. var x = s[0]; // x는 첫 문자 // 어차피 x와 같은 문자, 다른 문자의 갯수를 비교해야 하므로 count 하나로 퉁친다. var count = 0; for(i = 0; i   이제 이 코드를 적당히 반복하면 된다. 이 코드에서는 s[0]을 시작점으로 잡았지만, 한 블럭을 완성하면 그 다음 문자가 시작점이 되기 때문에 이부분을 수정한다. while( ... ){ p = 0 // 현재 위치를 p로 저장 var x = s[p]; var count = 0; for(i = 0; i   현재 위치를 p라는 변수로 저장하고, 한 블럭을 완성하면 현재 위치를 마지막 위치에 +1한다. 조건은 ..

일기 2024.12.10

(JavaScript) 체육복

여벌의 체육복을 가진 학생이 체육복을 도둑맞은 학생에게 체육복을 빌려주는 문제. 먼저 실제로 학생들이 체육복을 몇 벌 가지고 있는지를 배열로 나타낸다. n의 크기가 2 이상 30 이하라서 메모리 공간을 많이 차지하지 않을거라는 생각.function solution(n, lost, reserve) { var answer = 0; var student = new Array(n).fill(1); // 모든 학생의 체육복 갯수를 1로 초기화한다. for(e of lost){ // 체육복을 잃어버린 학생은 -1 student[e-1]--; } for(e of reserve){ // 체육복 여벌이 있는 학생은 +1 student[e-1]++; }} 다음은 학..

일기 2024.12.10

(JavaScript) 옹알이(2)

옹알이(2) (https://school.programmers.co.kr/learn/courses/30/lessons/133499) 문제 해결 방법1. babbling을 순회하며 몇개의 단어를 발음할 수 있는지 센다.var answer = 0;for(e of babbling){ if(...){ answer++; }}return answer; 2. 단어가 발음 가능한 단어인지 확인한다.2-1. 단어가 발음 가능한 단어로 시작하는지 확인한다.2-2. 발음 가능한 단어가 직전에 발음한 단어와 같다면 false를 반환한다.2-3. 발음 가능한 단어로 시작한다면, 단어의 앞부분에서 발음 가능한 단어를 제거한다.2-4. 발음 가능한 단어로 시작하지 않는다면, false를 반환한다.2-5. 단..

일기 2024.12.09

12/5

오늘 한 일코딩테스트 연습 덧칠하기(https://school.programmers.co.kr/learn/courses/30/lessons/161989)function solution(n, m, section) { var answer = 0; var wall = new Array(n); for(e of section){ wall[e-1] = 1; } for(i = 0; i 1. 주어진 section을 바탕으로 wall 배열을 생성한다.2. wall 배열을 순회하면서 왼쪽에서부터 벽을 칠한다.3. 칠한 횟수를 더해 반환한다. 중간에 for문에서 i+m을 i+4로 적어서 좀 고생했다.예시 문제에서 m값이 4라서 무심코 그렇게 했다. 기사단원의 무기(https://sch..

일기 2024.12.05

12/4

오늘 한 일코딩테스트 연습JavaScript 과일 장수 (https://school.programmers.co.kr/learn/courses/30/lessons/135808)function solution(k, m, score) { var answer = 0; // 1. 과일 점수를 역순으로 정렬한다. var sorted = score.sort((a,b) => b-a); // 2. m번째 과일마다 점수를 계산한다. for(i = m-1; i 1. 과일을 점수 역순으로 정렬한다.2. m번째 과일마다 점수를 계산한다. 완전탐색 모의고사(https://school.programmers.co.kr/learn/courses/30/lessons/42840)function solution(..

일기 2024.12.04

12/3

오늘 한 일코딩테스트 연습 2016년function solution(a, b) { var month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var day = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU']; var answer = ''; var len = 0; for(i = 0; i 1. 달마다 일 수를 미리 배열로 저장해둔다.2. 입력받은 월 일을 가지고 1월 1일로부터 경과한 날짜를 계산한다.3. 날짜를 7로 나눈 나머지로 요일을 계산한다. 카드 뭉치function solution(cards1, cards2, goal) { var answer = 'Yes'; ..

일기 2024.12.03