구글

    [구글엔지니어] Ch05 요약 및 토론

    Ch 05. 팀 이끌기 구글은 리더 역할을 두 가지로 구분 관리자(manager) : 사람을 이끔 테크 리드(tech lead) : 기술 관련 책임을 짊 5.1 관리자와 테크 리드 5.1.1 엔지니어링 관리자 구글은 엔지니어링을 아는 사람만이 소프트웨어 관리자가 될 수 있도록 한다. → 소프트웨어 경험이 있는 관리자를 고용하거나, 기존 소프트웨어 엔지니어를 관리자로 훈련시킨다. 거시적인 측면에서 엔지니어링 관리자는 자신이 관리하는 팀의 구성원 모두(테크 리드도 포함) 성과(performance), 생산성(productivity), 행복(happiness)을 책임져야 한다. 동시에 팀에서 만드는 제품의 사업적 요구까지 충족시켜야 한다. 5.1.2 테크 리드 테크 리드는 제품의 기술적인 면, 즉 기술과 관련..

    [구글엔지니어] Ch01 ~ Ch02 요약 및 토론

    Part I. 전제 Chapter 1. 소프트웨어 엔지니어링이란? 해당 챕터에서는 소프트웨어 엔지니어링과 프로그래밍의 차이에 대하여 다룬다. 소프트웨어 엔지니어는 시간의 흐름과 언젠가 변경될 가능성에 더 신경써야 한다. 소프트웨어 엔지니어링은 흐르는 시간 위에서 순간순간의 프로그래밍을 모두 합산한 것이다. (Software Engineering is programming integrated over time) 시간이 프로그램에 미칠 영향 알 수 있는 방법 → ‘이 코드의 예상 수명은?’ 소프트웨어 기대 생애 동안 요구되는 모든 가치 있는 변경에 대응할 수 있다면 그 프로젝트는 지속 가능하다. 라고 할 수 있다. 소프트웨어 엔지니어링이란 여러 버전의 프로그램을 여러 사람이 참여해 개발하는 것이다. 소프트웨..

    [오웬의 서재] #7. 생각이 너무 많은 서른살에게 (2021)

    나는 아직 서른 살은 아니지만, 내일 모레 서른 살이 되는 사람으로써 이 책을 누구보다 공감하면서 읽었다. 지금까지 많은 성공한 사람들의 이야기를 읽어 왔지만, 대부분의 이야기는 그들의 자랑, 또는 허세가 느껴져서 '남의 이야기' 정도로 밖에 느껴지지 않았고, 마음 깊숙히 공감이 되었던 적은 별로 없었던 것 같다. 그런데 이 분의 이야기는 진솔하고, 뻔하지 않았으며, 책과 방송(유퀴즈, 세바시 등)을 같이 보니 더욱 더 이 분이 전하고자 하는 메시지가 무엇인지를 잘 이해할 수 있었다. 제목에 끌려서 책을 집었지만, 읽고 나서 더 많은 감동을 받았으며 간략하게 이 책을 읽고 느낀 점을 공유해 보고자 한다. 이 분이 책을 통해서 전하고자 하는 메시지는 한 마디로 요약하면 '지금 너 정말 잘하고 있으니, 스스..

    [킥스타트] Google Kick Start 2020 Round F 문제 풀이

    이번 포스팅에서는 킥스타트 2020 Round F에 대한 문제 풀이를 공유하고자 한다. 1. ATM Queue 나는 이 문제를 우선순위 큐를 가지고 풀었다. 배열에 담겨진 각각의 출금액을 A1, A2, A3, ... , An 이라고 했을 때 그 출금액의 인덱스(몇 번째에 출금을 하는지)와 1회 최대 출금액(X)으로 나눈 몫을 가지고 클래스를 만들어서 출금액 몫 오름차순, 그리고 몫이 같을 경우 인덱스 오름차순이 되게 클래스의 기준을 만들어서 우선순위 큐에 넣으면 자동으로 정렬이 되어서 출력된다. 시간복잡도는 O(NlogN) 2. Metal Hervest 이 문제는 그리디 알고리즘으로 풀었다. 추수 기간이 오버랩 되지 않는다고 해서(These time intervals do not overlap) 문제가 ..

    [킥스타트] Google Kick Start 2020 Round D 문제 풀이

    이번 포스팅에서는 킥스타트 2020 Round D에 대한 문제 풀이를 공유하고자 한다. 1. Record Breaker 배열을 반복하면서 조건문을 통해 카운팅을 하면 쉽게 풀 수 있는 문제이다. 시간복잡도는 O(N) 2. Alien Piano 이 문제는 Greedy 알고리즘을 사용해서 풀었다. 먼저 배열을 통해 각각의 note의 pitch를 받아서 채워준다. 이 때 연속해서 같은 값이 나오게 되면 같은 alien piano key를 사용하게 되므로 배열에 넣어주지 않아도 된다. 이렇게 배열을 넣어 주었을 때 만약 다음과 같이 배열이 생겼다고 가정해 보자. 이 때는 연속해서 두 숫자가 같은 경우는 존재하지 않을 것이다. [1, 8, 9, 7, 6, 5, 4, 3, 2, 1, 3, 2, 1, 3, 5, 7]..

    [킥스타트] Google Kick Start 2020 Round C 문제 풀이

    이번 포스팅에서는 킥스타트 2020 Round C에 대한 문제 풀이를 공유하고자 한다. 1. Countdown 간단한 배열 문제이다. 배열의 반복문을 돌면서 주어진 숫자부터 시작되는 카운트 다운이 총 몇 개인지를 세어 주면 된다. 한 번 배열을 순환해서 답을 구할 수 있기 때문에 시간복잡도는 O(N). 2. Stable Wall 그래프 개념을 가지고 풀어야 하는 조금 까다로운 문제이다. 나의 경우 다른 사람의 풀이를 조금 참고하면서 풀었다. 문제를 이해하는 것 부터 쉽지가 않았던 것 같다. 위상 정렬(topological sort)과 DFS를 사용하였다. N개의 폴리노미노(polynomino)가 있고 이것들이 stable한 경우, 즉 각각의 폴리노미노가 바닥에 붙어 있거나, 다른 폴리노미노 위에 올라타 ..

    [킥스타트] Google Kick Start 2020 Round B 문제 풀이

    킥스타트 2020 라운드 B 문제 풀이를 해 보도록 한다. 내년 2021 킥스타트나 코드잼을 준비하시는 분들, 또는 알고리즘 공부를 하시는 분들에게 많은 도움이 되길 바란다. 1. Bike Tour 기초적인 탐색 문제이다. 전체 체크포인트 N개를 배열에 저장한 후 처음부터 끝까지 탐색하며 peak가 몇 개인지 파악하면 된다. 시간복잡도는 O(N). import java.io.*; import java.util.*; public class KickStart_2020B_1 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)..

    [킥스타트] Google Kick Start 2020 Round A 문제 풀이

    지금까지 백준만 풀다가 올해 남은 기간동안에는 구글 킥스타트 문제들을 좀 풀어보기로 했다. 구글 킥스타트는 구글에서 매년 개최하는 알고리즘 대회이다. 전 세계의 수만명이 참가하여 코딩 실력을 겨룬다. 1년에 여러 차례 대회가 열리는데(2020년 기준 한 달에 한 번꼴) 매번 대회가 끝나면 등수가 공개되어서, 객관적인 나의 수준도 판단할 수 있다. 매년 조금씩 바뀌지만 올해는 각 라운드당 3시간동안 네 문제를 푸는 형식으로 진행이 되고 있다. 나는 올해 중반부터 시작했고, 처음이다보니 아직 문제를 막 잘 풀지는 못했다. 그래서 2020년에 출제된 기출문제를 하나씩 풀어보면서 연습하고 그 내용을 블로그에 정리해 보려고 한다. 총 4문제 중에 4번 문제는 못 풀었고, 1~3번 문제만 풀어서 이에 대한 간단한 ..