전체 글

전체 글

    [우아한테크코스 5기] 프리코스 1주차 회고 - Kotlin 안드로이드

    목차 ✏️ 1주차 문제 🤔 스스로 고민하는 시간 ✏️ 1주차 문제 미션 - 온보딩 기존 우테코 프리코스는 3주차 과정으로 이루어졌지만, 5기부터 1차 코딩테스트가 없어지면서 4주간의 프리코스로 변경되었습니다. 추측이기는 하지만, 아마도 1차 코딩테스트 문제가 1주차 과제로 주어진 것이 아닐까 싶습니다. 총 7개의 문제로 구성되었으며, 백준 기준으로 브론즈 ~ 실버 난이도의 문제였습니다. 또한, 각 문제들은 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항 세 가지로 구성되어 있습니다. 위 미션 - 온보딩 링크를 들어가면 자세히 확인할 수 있습니다. 문제를 구현하기 전에, 각 문제별로 기능 목록을 만들고, 기능 단위로 커밋할 필요가 있었습니다. 따로 정리하라고 주어진 .md 파일 없었기에 개인..

    객체지향 프로그래밍 - OOP 상속(Inheritance) 이란?

    👀​ Study Goal 객체지향 프로그래밍(OOP) 상속 개념을 이해합니다. 상속의 필요성을 알아봅니다. 상속이 사용되는 사례를 코드로 작성해봅니다. ✏️ 상속(Inheritance) 이란? 상속(Inheritance)은 부모(Super) 클래스의 기능을 재사용(Reuse)하고 기능을 확장(Expansion)할 수 있는 객체지향 프로그래밍(OOP)의 특징입니다. 💡 상속은 왜(Why) 필요할까? 상속은 Super 클래스의 기능을 재사용하고, 확장할 수 있는 특징을 가지고 있습니다. 상속이 필요한 이유는 바로 재사용과 확장이라는 강력한 장점 때문입니다. 만약 상속이라는 개념이 존재하지 않는다면, 비슷한 기능을 구현할 때마다 동일한 코드를 작성해주어야 합니다. 객체지향적인 프로그래밍에 대해 처음 접해보시는..

    객체지향 프로그래밍 - OOP 캡슐화(Encapsulation) 이란?

    👀​ Study Goal 객체지향 프로그래밍(OOP) 캡슐화 개념을 이해합니다. 캡슐화의 필요성을 알아봅니다. 캡슐화가 사용되는 사례를 코드로 작성해봅니다. ✏️ 캡슐화(Encapsulation) 란? 캡슐화(Encapsulation)는 외부로부터 클래스의 정보를 감추고, 필드(field)와 메서드(method)에 대한 불필요한 접근을 막는 OOP 특징 중 하나입니다. 💡 캡슐화(Encapsulation)의 두 가지 측면 캡슐화(Encapsulation)에는 크게 2가지 측면이 있습니다. 1. 외부로부터 필드(field)와 메서드(method)에 대한 불필요한 접근을 막습니다. 2. 외부로부터 클래스의 구체적인 구현 내용을 감춥니다. 먼저, 필드와 메서드에 대한 불필요한 접근을 막아야 하는 이유를 예시를..

    객체지향 프로그래밍 - OOP 추상화(Abstraction) 이란?

    👀​ Study Goal 객체지향 프로그래밍(OOP) 추상화 개념을 이해합니다. 추상화가 사용되는 사례를 코드로 작성해봅니다. ✏️ 추상화(Abstraction) 란? 추상화(Abstraction)는 사물(Object)의 공통적인 특징을 하나의 개념으로 다루는 것을 의미합니다. ex) 개(Dog)와 고양이(Cat)를 동물(Animal)이라는 하나의 추상적인 개념으로 다룰 수 있습니다. 💡 추상화(Abstraction)의 예시(Example)는 무엇이 있을까? 객체지향 프로그래밍(OOP) 언어를 다루다 보면 추상화가 무엇인지 정확히는 모르더라도 명칭에 대해서는 많이 들어보았을 것입니다. 실제로 추상화를 적용하더라도 개념을 모르고 있는 상태라면, 추상화를 적용한지도 모르고 사용할 때가 많습니다. 위에 작성..

    [백준 - Python] 2579번 : 계단 오르기

    🌱 문제 https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 💡 설명 필자는 해당 문제를 BFS로 해결하려 했으나 채점 7% 에서 메모리 초과가 발생하였습니다. 아무리 n이 300이라고 해도 주어진 메모리가 128MB인 상황에서 메모리를 많이 요구하는 BFS로 문제를 해결하기에는 문제가 있어 보였습니다. 다음 방법으로 다이나믹 프로그래밍(DP)로 접근을 시도하였습니다. Memoization 기법을 통해 이전에 구한 최적값(해당 층까지 구한 최대 스코어)을 dp..

    [백준 - Python] 1697번 : 숨바꼭질

    🌱 문제 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 💡 설명 해당 문제는 BFS(너비 우선 탐색) 알고리즘으로 해결할 수 있는 문제입니다. 만약, BFS가 아닌 DFS(깊이 우선 탐색)를 사용하여 문제를 해결하려고 하면 시간초과가 발생합니다. 해당 문제에서 BFS와 DFS 사용의 차이를 생각해본 결과는 다음과 같습니다. DFS는 찾고자 하는 방향에 노드가 있으면 매우 빠른 속도로 찾을 수 있으나, 반대로 찾고자 ..

    [백준 - Python] 2839번 : 설탕 배달

    🌱 문제 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 💡 설명 해당 문제는 다이나믹 프로그래밍 또는 그리디 알고리즘을 요구하는 문제입니다. 우선 다이나믹 프로그래밍으로 풀이가 가능한지 확인하기 위해서는 2가지 조건이 있습니다. 1. 최적 부분 구조 (Optimal substructure) 2. 중복 부분 문제 (Overlapping subproblems) 즉, 큰 문제 상황을 작게 나누어서 해결하고자 할 때, 중복되는 상황이 발생 하며, 작게 나눠진 ..

    [백준 - Python] 2671번 : 잠수함식별

    🌱 문제 https://www.acmicpc.net/problem/2671 2671번: 잠수함식별 입력에 들어있는 스트링을 읽고, 이것이 잠수함의 엔진소리를 나타내는 스트링인지 아니면 그냥 물속의 잡음인지를 판정한 후, 잠수함의 엔진 소리에 해당하는 스트링이면 "SUBMARINE"을 출력하고 www.acmicpc.net 💡 설명 해당 문제는 정규식을 사용하면 LOC를 최소화 할 수 있는 문제입니다. 사실상 설명에 정규식을 표현해주는 문자가 있어서 골드V 문제에 비해 비교적 쉽게 해결할 수 있었습니다. 문제를 읽어보면 기호 ~ 는 최소 1번 이상 반복된다는 것을 의미합니다. 1~ = {1, 11, 111, 1111, ..., 1...1, ...} (01)~ = {01, 0101, 010101, 010101..

    [🏆우수상] 2022 서울시 IoT 공공도시데이터 해커톤 후기

    이번 포스팅에서는 2022.08.26 ~ 27 에 참여한 서울시 IoT 공공도시데이터 해커톤 참여 후기를 포스팅하도록 하겠습니다. 방학이 시작하면서 해커톤에 참여하여 정보통신부 장관상을 수상한 쾌감을 잊을 수 없었습니다. 그 때의 기분을 다시 느끼고 싶은 마음에 개강 직전에 여러 사람들과 함께할 수 있는 대외활동을 찾아보다가 마침 서울시에서 주관하는 해커톤을 찾을 수 있었습니다! 역시 해커톤 답게 누구나 참여할 수 있고, 어떠한 결과물이든 제출할 수 있었습니다. 필자는 Android 개발자이기 때문에 본인을 포함한 클라이언트 개발자 2명, 백엔드 1명, 디자이너 1명으로 총 4명으로 팀 '다원' 을 이루어 해커톤에 참여하였습니다. 해커톤에 참여하기 위해서는 위 데이터를 포함한 다양한 API 및 데이터셋 ..

    [Android] 테스트 코드는 왜 작성해야 할까?

    안드로이드에서 "왜" 테스트 코드를 작성해야 할까? 지금까지 테스트 코드에 대해 알아보기 전에는 '대체 왜 테스트 코드를 작성해야 하는가' 에 대해 의문을 품고 있었습니다. 필자뿐만 아니라 이 글을 읽는 많은 분들이 그렇게 생각하셨을 것입니다. 우선 테스트 코드를 작성하지 않았을 때의 개발 flow에 대해 정리해보았습니다. 기존 개발 Flow 기획물과 디자인 작업물을 바탕으로 코드를 작성하여 기능을 구현합니다. 구현한 기능이 정상적으로 작동하는지 AVD 또는 실제 디바이스를 바탕으로 결과를 확인합니다. 에러가 발생하면 Timber 또는 Log를 통해 어느 부분에서 오류가 발생했는지 파악합니다. 문제가 있는 코드를 fix하고 다시 빌드하여 위 과정을 반복합니다. 위 flow를 읽어보았다면 이런 생각이 들 ..