전체 글 168

소프트웨어 마에스트로 코딩테스트 1차 합격 후기

원래 일정에는 코딩테스트를 오프라인으로 1회 실시한다고 되어있었다. 하지만 코로나 때문에 1차, 2차로 나눠서 진행하였으며 1차는 온라인으로 진행되었다. (물론 2차도 온라인이었다) 문제에 저작권이 있기 때문에 정확하게 어떤 문제였는지 설명하기보다는 어떤 유형이었는지 작성하고자 한다. 알고리즘 3문제, SQL 1문제, 웹 1문제가 출제되었으며 유형은 아래와 같다. 알고리즘 1번 - Greedy 2번 - BFS 3번- dp, 조합 등 다양한 풀이가 있었던 걸로 기억한다. SQL - 두 가지 테이블을 활용하여 평균, 합계 등 수치 연산 WEB - 표 다루기 알고리즘은 프로그래머스 난이도 2 ~ 3 정도로 생각하며 SQL은 프로그래머스에 나와있는 문제들을 풀면 충분히 해결할 수 있었습니다. WEB은 Post,..

[ 백준 14499 ] 주사위 굴리기 - Python

문제 보기 주사위 굴리기는 시뮬레이션 문제이다. 문제 구현 순서는 아래와 같다. 1. N x M 지도에서 주사위를 이동시키면서 주사위 값의 변화를 파악 2. 지도에 있는 값과 주사위의 값을 상황에 맞게 복사 - 지도에 있는 값이 0일 때 주사위의 값을 지도로 복사한다. - 지도에 있는 값이 0이 아닐 때 지도에 있는 값을 주사위로 복사하고 지도에 있는 값을 0으로 수정한다. 3. 주사위 윗 면에 쓰인 수 출력 [ 값의 변화 파악 ] 4가지 방향으로 주사위가 이동할 때 주사위의 값을 유지하면서 모양을 바꾸는 것이 핵심이었다. 아래는 주사위 이동에 대해서 정리한 표이다. 동 서 북 남 1 - >3 1 -> 4 1 -> 2 1 -> 5 2 -> 2 2 -> 2 2 -> 6 2 -> 1 3 -> 6 3 -> 1..

소프트웨어 마에스트로 11기 서류 합격 후기

소프트웨어 마에스트로 11기 서류 질문은 총 4문항이다. 1. 소프트웨어 분야 전문성을 키우기 위해 남들과 달리 특별한 노력을 한 경험을 서술하라. 2. 귀하의 장래희망을 서술하라. 3. 어떤 능력을 갖춘 연수생들과 어떤 프로젝트를 어떻게 수행할 것인지 계획을 서술하라. 4. 앞으로 약 6개월간 귀하께서 본 과정을 통해 이루고자 하는 목표가 무엇인지 서술하라. 1. 소프트웨어분야 전문성을 키우기 위해 남들과 달리 특별한 노력을 한 경험을 서술하라. 소프트웨어 마에스트로는 3인 1조로 팀 프로젝트를 진행하는 활동이기 때문에 해커톤, 공모전의 경험을 강조하면서 추가적으로 조교, 책 집필, 연구실, 다양한 교육 이수 경험을 적었다. 정리하자면 해커톤, 공모전 -> 협업, 창의력 증진 집필, 조교 -> 지식 나..

[ 백준 14503 ] 로봇 청소기 - Python

문제 보기 로봇 청소기문제는 시뮬레이션 문제이다. 기존의 bfs 구현에서 아래 2가지를 추가해주면 된다. 1. 현재 방향을 기준으로 왼쪽방향부터 차례대로 탐색을 진행하기 때문에 현재 방향을 왼쪽방향으로 바꿔주는 함수 2. 현재 방향을 기준으로 후진을 하기 위해서 역방향으로 바꿔주는 함수 위 2가지를 추가해주고 기존의 bfs와 유사하게 코드를 구현하니 통과하였다. 코드 # boj 14503 # blog : jjangsungwon.tistory.com import sys from collections import deque # 북 동 남 서 dy = [-1, 0, 1, 0] dx = [0, 1, 0, -1] # 방향 전환 def change(d): if d == 0: # 북 -> 서 return 3 elif..

웹 크롤링 vs 웹 스크래핑 vs 웹 파싱

이번 글에서는 크롤링, 스크래핑과 파싱의 차이점에 대해서 정리하고자 한다. 크롤링 - 크롤러(자동화 봇)가 무수히 많은 인터넷 상의 페이지(문서, html)를 수집해서 어떤 사이트에 어떤 정보가 있는지 분류하고 나중에 쉽게 찾아볼 수 있도록 하는 것 스크래핑 - 웹 사이트에서 원하는 정보를 추출하는 기술 파싱 - 페이지에서 내가 원하는 데이터를 특정 패턴이나 순서로 추출하여 정보로 가공하는 것을 말한다. 크롤링, 스크래핑, 파싱에 대한 용어 정의는 사람마다 조금씩 다른 것 같다. 크롤링과 스크래핑을 동일선상에서 말씀하시는 분들도 있고, 스크래핑이 크롤링의 상위 개념처럼 말씀하시는 분도 있다. 용어 간의 관계를 완벽하게 이해하기보단 각각의 용어에 대해 개념 정도는 알고 있는 게 좋을 것 같다.

CS 2020.06.02

[ 백준 14502 ] 연구소 - Python

문제 보기 bfs와 조합을 응용하여 구현하였다. 지도에서 3개의 벽을 세웠을 때 안전 영역의 최대 크기를 출력하는 문제이다. 조합을 통해서 벽을 세울 위치를 구하였으며, 벽을 세운 후 bfs를 통해서 바이러스를 퍼트렸다. 알고리즘 순서는 다음과 같다. 1. 벽을 세울 수 있는 후보를 찾는다. (배열에서 0 값을 찾는다) 2. 후보 중에서 3개를 고른다. (combinations 내장 함수 이용) 3. bfs 4. 안전 영역의 최대 크기를 업데이트하고 2번으로 돌아간다. (후보 중에서 3개를 고르는 모든 경우를 수행하고 알고리즘은 종료된다) 코드 # boj 14502 # blog : jjangsungwon.tistory.com import sys, copy import itertools from colle..

손글씨 숫자 인식(MNIST) - Python

이번 글에서는 Python과 MNIST 데이터셋을 이용해서 손글씨 숫자를 인식하고자 한다. MNIST 데이터셋 MNIST 데이터셋은 손글씨 숫자 이미지 집합이다. 기계학습 분야에서 아주 유명한 데이터셋으로, 간단한 실험부터 논문으로 발표되는 연구까지 다양한 곳에서 이용하고 있다. 0부터 9까지 숫자 이미지로 구성되며 훈련 이미지 60,000장, 시험 이미지가 10,000장으로 구성된다. 훈련 이미지를 사용해서 모델을 학습하고, 학습한 모델로 시험 이미지들을 얼마나 정확하게 분류하는지 추론한다. 각각의 이미지 데이터는 28 x 28 크기의 회색조 이미지(1채널)이며, 각 픽셀은 0에서 255까지의 값을 가진다. 또한 각 이미지에는 '7', '2', '1'과 같이 그 이미지가 실제 의미하는 숫자가 레이블로 ..

[ 백준 1991 ] 트리 순회 - Python

문제 보기 이 문제는 트리 문제이다. 트리를 구성하기 위해서 class를 사용하였다. 전위 순회, 중위 순회, 후위 순회 함수는 전체적인 구성은 똑같고 출력 위치만 바꿔주면 된다. 전위 순회의 알고리즘 순서는 아래와 같다. 1. 현재 노드 값을 출력한다. 2. 현재 노드의 왼쪽 자식의 값이 .이 아니라면 왼쪽 자식으로 이동하고 다시 1번을 진행한다. 3. 현재 노드의 오른쪽 자식의 값이 .이 아니라면 오른쪽 자식으로 이동하고 다시 1번을 진행한다. 코드 class Node: def __init__(self, item, left, right): self.item = item self.left = left self.right = right def preorder(node): # 전위 순회 print(node..

[ 백준 1697 ] 숨바꼭질 - Python

문제 보기 이 문제는 bfs 문제이다. 수빈이가 3가지 연산을 통해서 동생에게 최대한 빠르게 갈 수 있는 시간을 출력하는 문제이다. 최단 시간과 관련된 문제는 대부분 bfs와 관련이 있는 것 같다. 알고리즘 순서는 다음과 같다. 1. 수빈이의 현재 위치를 큐에 담는다. 2. 현재 위치에서 갈 수 있는 위치를 큐에 담는다(현재 위치 + 1, -1, * 2) 3. 2번 과정을 동생의 위치가 나올 때까지 반복적으로 한다. 위 알고리즘으로 구현을 하여도 시간 초과 혹은 메모리 초과가 발생할 수도 있다. 방문 여부를 확인하는 visited를 list형으로 했을 때 시간 초과가 발생했으며, 큐에 담는 위치를 제한하지 않으면 메모리 초과가 발생하였다. 따라서 방문 여부는 set으로, 큐에 담는 위치는 0 이상 10만..

[백준 1629] 1629] 곱셈 - Python

문제 보기 이 문제는 분할 정복 문제이다. A = 10, B = 11, C = 12라고 주어졌을 때 구해야 하는 정답은 10^11 % 12이다. 만약 10 * 10 * 10 * 10 ... * 10 % 12로 문제를 풀고자 했으면 시간 초과가 발생할 것이다. 시간 초과를 해결하기 위해서 곱셈의 개수를 줄이는 분할 정복이 필요하며 아래 과정을 중점적으로 구현하면 된다. 1. b의 값이 짝수인지 홀수인지 파악한다. 2. b의 값이 짝수라면 10 ^10 -> (10^5)^2 형태로 바꿔준다. 3. b의 값이 홀수라면 10 ^11 -> (10^5)^2 * 10 형태로 바꿔준다. 코드 def power(a, b): if b == 1: # b의 값이 1이면 a % C를 return한다. return a % C el..