분류 전체보기
Youtube 클론
Youtube 클론
2021.05.25니콜라 선생님의 Youtube 클론 강의를 시작합니다. node.js 사용법을 익히는데 목적이 있습니다. ㅎㅎ ! 시작부터 code 명령어가 안먹어서 vscode를 직접 띄워 줬습니다. vscode를 띄운 다음에, github으로 이동해서 코드 형상관리 레포지토리를 하나 생성하였습니다. 생성한 레포지토리와 연동하였습니다. git remote 명령어 참고 프로젝트가 비어있기 때문에 package.json을 만들어 프로젝트에 대한 기본 정보를 입력하였습니다. 실제 정보 기입을 다 한뒤에 package.json을 보면 그대로 들어가 있는것을 확인해볼 수 있습니다. index.js에 "Hello" 를 찍어두고 실제 terminal에서 찍히는지 확인해보았습니다. package.json에 scripts 를 추가해서..
Spring 프로젝트 설정 & 테스트 코드 작성하기
Spring 프로젝트 설정 & 테스트 코드 작성하기
2021.05.25시작 인텔리제이를 사용하였습니다. Gradle 에서 Java를 선택하고 Next를 진행합니다. 프로젝트 이름을 기입합니다. 프로젝트 이름을 기입하고 Finish 버튼을 클릭하게 되면 하기 처럼 프로젝트 Directory 구조가 생성됩니다. build.gradle을 설정할 때 아래처럼 설정해주었습니다. dependencies 까지 플러그인 의존성 관리를 위한 설정입니다. 의존성을 선언하여 사용합니다. 오른쪽 상단의 코끼리 버튼을 클릭하게 되면 정의한 build.gradle를 확인하고 설치하게 됩니다. 패키지를 설치 완료되면 실제로 Gradle 안에서 무엇이 설치됬는지 직접 확인해볼 수 있습니다. github과 연동할 수 있다. 아래 화면의 명령어를 수행 후 Share Project on Github 을 입..
BOJ 17612 쇼핑몰
BOJ 17612 쇼핑몰
2021.05.25개요 이 문제는 우선순위 큐를 사용하는 문제지만, 정렬 방법에 대해 이해하고 있어야 하고 무엇보다 문제에서 주어진 요구사항을 동적으로 처리하는것보다 사전에 전처리하여 값을 모두 저장 한뒤 문제 요구사항에 맞게 풀어야 했었습니다. 처음에는 while 문으로 계속 돌면서 입력 받는대로 동적으로 값을 처리 해주었습니다. 결과적으로 꼬였습니다. 그래서, k개 즉 카운터라고 볼 수 있는 k개에 쇼핑 카트를 모두 대기하는 값을 pq에 담게 되었습니다. 그림 그림을 보게 되면 어쨋든, 상품들이 1초에 하나씩 계산이 될텐데 더 적은 상품에 대해서 카운터에 배정되게 됩니다. 상품의 개수가 같다면 카운트가 더 적은 애한테 우선 할당하게 되는데 그게 인입하는 과정에서 수행하게 됩니다. 반대로, 나갈때도 마찬가지로 기본적인 ..
프로그래머스 튜플(Java)
프로그래머스 튜플(Java)
2021.05.24소개 이 문제는 2019 카카오 개발자 겨울 인턴십으로 출제되었던 문제이다. 해당 문제에 대한 아이디어는 다음과 같다. 로직 1) 연속된 숫자를 추출하여야 한다. 2) 1의 목적을 위해서 자료구조 HashMap을 사용하였다. 3) HashMap의 경우 같은 Key라면 (default :1) +1 씩 더해주었다. 4) 결과적으로 Value (HashMap의 Key에 따른 Value) 로 내림차순하여 순서대로 Key값을 출력해 주었다. 구체화 해보면 다음과 같다. 이를 그림으로 도식화 하면 다음과 같다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40..
BOJ_1781_컵라면
BOJ_1781_컵라면
2021.05.23시작하면서 해당 문제는 pq 외에도 그리디한 방법으로 해결해 볼 수 있는데, 포스팅에서는 pq로 푸는 방법에 대해 고민해봤습니다. 여러 알고리즘 로직을 세워서 문제를 접근했는데, 9%에서 "틀렸습니다." 가 나와서 참으로 힘들게 했던 문제입니다. 문제 접근 시 데드라인과 컵라면 수를 잘 고려해봐야 하는데 데드라인은 우선순위를 높게, 같다면 컵라면 수는 더 큰것을 정해서 큐에 담아주어야 합니다. 처음 생각한 점 우선순위 큐를 지정했을 때 정렬 순서를 1. 데드라인은 우선순위를 높게 2. 컵라면 수는 더 큰것을 지정 3. 우선순위 큐에 Max-heap 구성 (데드라인 기준으로 push 할 경우 더 높은 숫자의 데드라인이 pop되는 것을 고려) ex) pq에 {1,7} 이 있다고 고려 하면, 새롭게 {2,6}..
JS06 :: 바닐라 JS 프로젝트(2)
JS06 :: 바닐라 JS 프로젝트(2)
2021.05.22이전 바닐라 JS 프로젝트에서 배경화면을 변경하여 나만의 앱을 생성해보겠습니다. 정적인 화면을 구성하는 index.html 에서 배경화면 처리를 위한 script를 등록하겠습니다. index.html에서 weather.js 를 등록해줍니다. index.html bg.js image는 총 3장을 준비하였습니다. 오리 3총사 image 객체를 생성하고 나면 css의 선택자 class를 포함시키고, body 태그에 해당 tag 를 prepend 하게 됩니다. body 안에 image 가 잡히게 됩니다. (css에서 z-index = -1 로 잡았기 때문에 현재 맨 뒤로 가있는 상태입니다.) 이 다음 코드인 weather.js 구현해야 하는데 현재 위치 좌표를 받아오지 못하고 있다. mac에서 위치 좌표를 설정..
프로그래머스 행렬 테두리 회전하기
프로그래머스 행렬 테두리 회전하기
2021.05.21프로그래머스에서 삼성 역량 테스트에 기본 문제가 될 수 있는 좋은 문제를 찾아 풀어보았습니다. 콘솔화면에 맵에 저장되어 있는 값을 출력하며 방향에 따라 맵에 값이 갱신되는지 체크하며 문제를 해결하였습니다. 처음에는 for 문을 돌면서 확인해보려 했는데, DFS로 반복 탐색을 수행하면 코드 가독성을 높일 수 있을것이라 생각하여 DFS로 접근하였습니다. DFS로 접근 ⏤ 방향 정하기 DFS에 접근할 때 dir 1,2,3,4 로 구성하여 문제를 접근하였습니다. Main에서 DFS에 넘겨주는 params dir가 1, 2일 때 경우 처음 DFS를 진행할 때 시작 지점인 sx, sy에서 시작하는 것이 아닌 sx, sy+1 로 시작지점을 선택하였습니다. 이전 값은 세번째 인자로 전달하여 좌표는 다음 좌표를 바라보고..
JS06 :: 바닐라 JS 프로젝트
JS06 :: 바닐라 JS 프로젝트
2021.05.21바닐라 JS 공부를 시작하면서, 노마드 코더에서 제공하는 바닐라 JS로 크롬웹 만들기를 트라이 해보았습니다. Directory 구조 우선 가장 베이직이 되는 index.html 부터 살펴보겠습니다. html의 구조는 head, body 로 이루어져 있습니다. stylesheet에 포함되어 있는 index.css 로부터 css 값을 읽어와 html이 web의 DOM에 업데이트 하게 됩니다. index.html 보통의 경우에 아래와 같이 많이 사용하게 됩니다. HTML Foramt 여기서 div tag를 이용해 웹 상에 움직이는 시계를 트라이 해보겠습니다. 첫번째 구현 항목은 web으로 동작하는 시계를 만들어보는 것입니다. Redering 화면 ⏤ 1 위 렌더링 화면을 구성하기 위해서 아래 html, js를..
프로그래머스 짝지어 제거하기
프로그래머스 짝지어 제거하기
2021.05.20이 문제를 처음 시도할 때는 for 문으로 순회하며 같은 알파벳이 있는 경우 (현재 인덱스, 다음 인덱스) 를 넘어가고 다음 알파벳을 체크 하였다. 로직을 수행할 때는 다음 순서를 따른다. 1) 현재 알파벳과 다음 알파벳을 비교 2) 새로 만든 문자열을 가지고 1번을 수행 TC는 통과했지만, 결국 시간 초과 가 났다. 그러면 어떻게 푸는것이 효과적일까? 정답은 Stack 은근 간단하다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import java.util.*; class Solution { public int solution(String s) { int answer = -1; char[] chas = s.toCharArray(); Sta..
책으로 ㅡ 치유하는 시간
책으로 ㅡ 치유하는 시간
2021.05.20간만에 책을 읽었다. 책을 읽으면서 느낀 점은 세상에 우연이란 없었다 라는 것. 왜냐하면, 인과 관계에 발생은 우연히 발생하는것이 아니기 때문이다. 정확한 것은 원인이 있기 때문에 결과로 이어지는 것임을 한번 더 느꼈다. 총평에 대해 언급하면, 좋은 사례을 인용해 전달하고자 하는 내용을 명확하게 소개하고 있다. 특히, 제 3자의 눈에서 생각해보면 지극히 객관적인 것들에 대해(평범해 보일 수 있는것에 대해) '나' 라는 시점으로 끌고 와 공감하고, 위로하며 학창 시절부터 성인되기 까지 경험적으로 한번씩 겪어 볼 만한 내용들을 전부 다루고 있다고 생각한다. 우리는 흘러가는 시간 속에서 경험을 하고 산다. 경험 속에서 받은 감정들의 색은 가지각색이며 여러 가지 색으로 또 물들어 간다. 슬픔, 분노, 즐거움, ..
프로그래머스 2개 이하로 다른 비트
프로그래머스 2개 이하로 다른 비트
2021.05.20프로그래머스에 새롭게 보이는 문제가 있어 도전하였습니다. 처음 문제에 접근할 때는 다음 로직으로 프로그래밍 하였습니다. 1) 주어진 숫자 N에 대해 이진수로 변경한다. 2) 주어진 숫자 N에 대해 순차적으로 1씩 증감시키면서 (1)에서 변경한 이진수와 비교하여 자릿수 숫자의 차이가 2개 이하인 경우에 대해 answer를 return 한다. 위 로직을 수행할 경우 시간 초과가 발생하게 됩니다. 생각해보면 numbers의 모든 수가 10의 15승이기 때문에 최악의 경우 10의 15승이 될 수 있기 때문에 사실상 정답이 될 수 없는 로직입니다. 그 다음 문제를 접근할 때는 규칙에 주목하였습니다. 문제에서 제공되는 예시를 가지고 생각해봤습니다. 7=0111 에 대해 다른 비트의 개수는 11=1011 이 됩니다...
완주하지못한선수 / k번째 수
완주하지못한선수 / k번째 수
2021.05.08Javascript로 두 문제를 풀어보았습니다. 관련해서 Javascript 문법이나 특이점을 정리해보고자 합니다. 1) 완주하지못한선수 HashMap을 사용해서 해결할 수 있는 문제였는데 Javascript에서 HashMap을 정의할 때 아래와 같이 사용합니다. HashMap에 데이터를 삽입한 후 for loop으로 데이터를 조회할 때에는 아래와 같이 사용합니다. 이 문제에서는 특별한 로직이 필요없습니다. 여러 풀이법이 있겠지만 HashMap을 이용하면 쉽게 접근할 수 있습니다. Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 function solution(participant, completion) { var ans..