문제 링크 programmers.co.kr/learn/courses/30/lessons/60058 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 콘은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴 programmers.co.kr 풀이 문제에서 친절하게 해결 방법을 설명해줍니다. 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 2. 문자열 w를 두 "균형 잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형 잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. 3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시..
문제 링크 programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자 programmers.co.kr 풀이 간단합니다. 가능한 모든 단위(1 ~ s의 길이)로 문자열을 잘라 압축해보고, 그 결과 중 가장 작은 값을 고르면 됩니다. 코드에선 구현상 편의를 위해 마지막에 더미 스트링을 하나 끼워넣었습니다. 정답 코드 const compressData = tokens => { let s = ''; let prev = ''; let cnt = 0; tokens.for..
요즘 들어 알고리즘 문제를 자바스크립트로 한두 문제씩 풀고 있습니다. BOJ를 자바스크립트로 시도해보셨다면 아시겠지만, 들어오는 입력을 모두 한 배열에 때려 박고 각각 인덱스로 접근해 사용하게 됩니다. 저는 이게 너무 적응이 안 돼 방법을 찾던 중 괜찮은 아이디어가 떠올라 공유하게 되었습니다. 중간 설명 없이 바로 이용하고 싶으신 분은 여기를 클릭해주세요. input 함수 만들기 백준 사이트의 컴파일 실행 도움말에서는 Node.js 입력을 다음처럼 소개합니다. var fs = require('fs'); var input = fs.readFileSync('/dev/stdin').toString().split(' '); var a = parseInt(input[0]); var b = parseInt(inpu..
레포지토리 링크 github.com/degurii/fake-talk 요즘 몸이 별로 안 좋아 코딩을 많이 하진 못했다. 건강도 잘 챙겨야겠다. 1) User 객체를 직접 사용하는 대부분의 코드에 대해 User ID를 이용하도록 변경했다. 간단히 끝날 줄 알고 무작정 수정을 시작했는데, 중간중간 너무 헷갈려 컴포넌트 구조를 몇 번씩 확인하고 User가 어디서 사용되는지 메모장에 써가며 해결했다. 다음부터 이런 류의 수정은 더 체계적으로 시작해야 할 듯하다. 2) 시간 표시 기능을 조금 손봤다. 실제 카카오톡에선 채팅 중 시간이 바뀌면 타임스탬프가 한번 더 표시된다. 지금 내 코드에선 같은 유저가 연달아 채팅하는 경우 가장 마지막 톡에서만 타임스탬프를 표시하고 있다. ChatItem 컴포넌트에 first, ..
문제 링크 programmers.co.kr/learn/courses/30/lessons/64065 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 요즘 들어 c++을 지원하지 않는 코딩 테스트가 많이 보여 프로그래머스 문제를 자바스크립트를 이용해 풀기로 했습니다. 풀이 1) 주어진 문자열을 파싱 해줍니다. 저는 각 집합을 리스트로 표현해 [[...], [...], [...], ...] 꼴로 저장했습니다. 2) 부분 집합을 길이 순으로 오름차순 정렬해줍니다. ..
오늘은 메시지 수정, 삭제, 유저 이름 수정 기능을 구현했다. 1) 처음엔 수정할 chatItem의 id를 찾아 item.message만 변경해줬는데 수정된 내용이 렌더링 되지 않았다. 생각해보니 리액트가 state를 이전 상태와 비교할 때 객체는 변경되지 않고 안의 내용물만 변경되었으니 다시 렌더링 하지 않았던 상황이었다. 이를 새로운 객체로 대체해주어 해결했다. 2) 분명히 컴포넌트가 7개밖에 안 되는 작은 프로젝트인데도 state 관리하기가 너무 귀찮았다. 부모 컴포넌트에 2~3개의 자식 컴포넌트가 들어가고, 그 컴포넌트 안에서도 2~3개씩 자식 컴포넌트가 존재한다. 근데 자식 컴포넌트 사이에서 state를 공유해야 할 일이 생기니 공통 부모 컴포넌트마다 state가 생기고, 그에 따른 state ..
이번엔 git rebase를 성공했다!! 깃(Git) 리베이스 사용하기 - 스타트업 엔지니어링 이 글이 정말 많은 도움이 되었다. feature브랜치에서 디벨롭 브랜치와 rebase하고, 디벨롭에서 피쳐를 머지하니 성공적으로 커밋이 합쳐졌다. 설명을 보면서 느낀 점은, 아직 HEAD가 뭔지도 잘 모르고 있었다는 거다. 프로젝트가 끝나면 꼭 깃 북을 정독해야겠다는 생각이 들었다. 오늘 한 일 메시지가 처음인지, 끝인지를 판단해 아바타, 이름과 시간을 상황에 맞게 출력하도록 했다. 시간 설정 기능을 추가 채팅 입력창과 메시지 출력창을 mock up 데이터말고 실제 데이터를 사용하도록 변경했따 남은 일 메시지 수정, 삭제 기능 이미지 파일 업로드(채팅, 아바타) 자잘한 css 수정, css 안입힌거 구현 텍스..
이번 프로젝트부터 git flow와 칸반 보드를 적용하게 되었다. 칸반 보드는 여러 협업 툴이나 깃허브 자체에서도 지원해주는 프로젝트 관리 툴이다. 이런 식으로 issue를 통해 해야 할 일을 추가하고, 칸반 보드에서 진행 상황을 쉽게 관리할 수 있다. 각 이슈 번호에 대해 커밋을 날리니 어떤 일을 언제, 어떻게 한 건지 알아보기 편해서 좋다 ㅎㅎ git flow는 여러 브랜치를 나눠서 작업하는 전략인데, 나는 master, develop, feature만 사용할 예정이다. 음.. 처음이다 보니 실수로 feature 브랜치에서 바로 master 브랜치로 풀리퀘를 때려버렸다. 잠시 멍때리다 develop에다가 풀리퀘를 때렸다. 사실 뭔지도 모르고 일단 해본 거다.. 그랬더니 레포지토리에 revert-fea..