본문 바로가기

분류 전체보기

(336)
백준 1474번 - 밑 줄(java, 그리디, 구현) https://www.acmicpc.net/problem/1474 무슨말인지 잘 모르겠는 문제인데 해석만하면 그렇게 어려운 문제는 아니다. 그러나 문자열을 다루는데 익숙하지 않다면 조금 어려울 수도 있다. 사전순으로 앞에 온다는 의미를 잘 해석해야하는데 나도 이것을 잘 못해서 이게 왜 실버1이지 싶었다. 사전순이란 AABBBAAABB  -> AAABB 가 먼저온다. 즉, 밑줄 보다 우선순위가 높은 대문자 앞에는 밑줄이 되도록 오지 않는 것이 좋다. AAA_BBaaAA_ABBaa -> AAA_BBaa 가 먼저온다.   AAA_BBaaAAABBa_a -> AAABBa_a 가 먼저온다  이제 느낌이 올것이다. 문자열을 탐색하며 먼저 소문자 앞에 밑줄들을 추가하고 만약 더 이상 소문자가 없다면 뒤쪽에 있는 대문..
백준 1477번 - 휴게소 세우기 (Java) https://www.acmicpc.net/problem/1477 이분탐색임을 알고 들어갔는데도 뭘 이분탐색으로 잡아야할지 까다로운 문제. 체킹하는 부분도 만만치 않다. 이 문제의 핵심은 각 휴게소와 휴게소 사이에 거리를 이분탐색의 매개변수로 잡는 것이다. 1번    2번                   3번 세개의 휴게소가 있을 때 1번과 2번의 차이가 100이라하고 2번과 3번의 거리가 200이라하자. 만약 현재 매개변수가 70이면 1번과 2번 사이에는 1개, 2번과 3번 사이에는 2개를 지을 수 있다. 그러나 지을 수 있는 휴게소의 개수가 2개라면 70 에서 90정도로 늘려서 진행해볼 수 있다. 이 문제는 휴게소의 최소거리를 매개변수로 잡기 때문에 파라매트릭 서치로 만약 지을 수 있는 휴게소가 지금..
JavaScript - var, let , const 차이 최근 자바스크립트를 공부하면서 세개의 차이가 궁금해졌다. const의경우는 다른 언어들에도 많은 한 번 결정되면 절대 변하지 않는 변수임을 당연히 알고 있다. var과 let의 차이는 뭘까? 1. 범위 function varScope() { if (true) { var x = 10; } console.log(x); // 10 - 함수 스코프를 가지므로 접근 가능}function letScope() { if (true) { let y = 10; } console.log(y); // ReferenceError - 블록 스코프를 가지므로 접근 불가}varScope();letScope(); var는 함수 범위를 가지기 때문에 블록을 벗어나도 접근이 가능하..
JavaScript - 자바스크립트의 클래스 자바스크립트는 특이하다.. 클래스를 구성하는데 클래스의 구성원들을 컨스트럭터(생성자)에서 결정한다. class Korean { constructor(name, age) { this.name = name; this.age = age; this.country = 'Korea'; } addAge(age) { return this.age + age; }} 그리고 자바스크립트 답게 메소드의 형식은 지정할 필요가 없고 private public 이 없다. 기본적으로 모두 public 이다.하지만 함수 앞에 #을 붙이면 프라이빗을 정의된다. 메소드 이름 앞에 #이라니 조금 생소하다..!! class Pet { constructor(name, age) { console..
javascript - 객체 정렬 개발을 하다보면 가장 많이 쓰이는 함수가 정렬이 아닐까 싶다.그리고 정렬은 각 언어들마다 조금씩 쓰는 법이 달라서 이번 기회에 자바스크립트의 정렬에 대해 정리하고자 한다. const user = [ { name: '홍길동', age: 40 }, { name: '임꺽정', age: 12 }, { name: '주몽', age: 23 }, { name: '척준경', age: 88 },];// 나이순 오름차순const result1 = user.sort((a, b) => a.age - b.age); console.log('result1: ', result1);/* { name: '임꺽정', age: 12 }, { name: '주몽', age: 23 }, { name: '홍길동', age: 4..
JavaScript - 고차함수(map, fill, reduce) 자바스크립트는 함수형 프로그래밍에 알맞은 언어라고 한다. 그리고 자바스크립트를 이렇게 만들어주는 요소가 JavaScript의 고차개념이다. 고차함수는 자바스크립트에서 광범위하게 사용되며 이것을 모른다면 자바스크립트 개발자라할 수 없다. 함수형 프로그래밍이란, 함수를 다른 함수의 파라미터로 넘길 수 있고(!!) 반환값으로 함수(!!)를 받을 수 있는 프로그래밍 형태이다. C/C++ 같은 고전파와 비교가 안되는 유연함이다. Java 진영 또한 점진적으로 함수형 프로그래밍을 위해 고차함수를 받아들이는 추세이다. 자바스크립트는 함수를 객체로 받아들이기 때문에 위와 같은 행동들이 가능하다. 리턴값으로 넘긴다던가, 파라미터로 받는다던가. 그래서 다음과 같은 행위가 가능하다. const square = functio..
백준 1516번 - 게임 개발 (C++, 위상정렬, 다이나믹 프로그래밍) https://www.acmicpc.net/problem/1516 다시풀어본 위상정렬 + 다이나믹 프로그래밍 문제이다.문제 분류가 다이나믹 프로그래밍이라 dp라 쓰긴 했는데 솔직히 이게 dp인가 싶다. 그냥 정답을 계속 갱신하는데만 쓰이는데 이게 디피라고 볼 수 있는건가..?  위상정렬은 순서가 정해진 그래프를 보고 그 순서대로 정렬이 가능한 유용한 알고리즘이다. 그것을 사용해 이 예제를 풀어보자.선행조건이 없는 1번과 7번 건물이 먼저 지어질 것이다. 3번의 경우 1번을 짓는데 100의 시간, 7번이 200, 6번이 300 이라 가정하면 3번을 짓는데 드는 시간은 6,7번을 지어야하는 500의 시간이다.  그리고 3은 1번에서 도착할 경우와 6번에서 도착할 경우를 비교해야한다. 즉, F(3) = com..
누적합 알고리즘(1차원, 2차원 누적합) 누적합 알고리즘은 1~N까지 합을 효율적으로 구할 수 있는 알고리즘이다. 11 + 21 + 2 + 31 + 2 + 3 + 4 라고하면 sum[1] = 1sum[2] = 3sum[3] = 6sum[4] = 10 이고 여기서 2~4까지의 합을 구하면 sum[4] - sum[1] 과 같다. 즉 answer = sum[end] - sum[start - 1] 이다. 그리고 중요한건 모든 sum 배열을 구성하는 것이다. 이 때 O(N^2)의 시간을 사용하는 것은 너무 비효율적이다. 효율적으로 사용하기 위해 sum[2] = sum[1] + arr[2]sum[3] = sum[2] + arr[3]... 식을 사용하면 O(N)으로 prefix배열을 구성할 수 있다. 1차원 배열 누적합은 쉽게 구성이 가능하다. 이것을 응용..