흔히 데이터를 다루는 상황에서 마주칠 수 있는 데이터 형식 중에는 이전 게시글에서 다뤄본 csv 파일 말고도 json 파일이 있습니다. 하지만, 처음 json을 접한 사람은 보통 csv 파일을 다룰 때보다 어려워 하는 것 같은데요, 그것은 csv 파일이 아마 엑셀로 열어서 쉽게 열람이 가능하지만 json은 엑셀로 열 수도 없고 억지로 열어봐도 json 나름의 생소한 문법 때문에 당황하기 때문일 것입니다. 아래와 같이 말이죠. data.json { 'name': 'nero', 'age': 2, 'color': 'black', 'like_food': ['banana', 'apple', 'chewrrr'], 'is_cat': True, 'is_dog': False, 'friends': { 'poki': 'ca..
www.acmicpc.net/problem/2869 단계별 문제에 기본 수학 1에 올라와 있던 문제입니다. 당연히, 올라갔다 내려갔다를 반복하는 알고리즘을 짜면 안되고, 도착했을 시점에 며칠이 흘렀는지 계산하는 수학 식을 적절히 세워야합니다. 🤔 고민된 점 특별히 고민이 될만한 점...이라기 보다는, 달팽이가 마지막에 목표 높이에 올라가는 시점에 며칠이 지났는지를 측정한다는 점을 주의해야 한다는 정도였습니다. 그러니까, 목표 높이에 닿으면 다시 미끄러질일이 없다는 점을 주의해야해요. ✔️ 힌트/해결법 먼저, 달팽이는 하루에 A미터 올라가고 B미터 내려가는 행동을 반복하기 때문에 하루가 지나면 최종적으로 A-B 미터를 움직인다는 것을 쉽게 알 수 있습니다. 앞서 말했듯이, 중요한 점은 A미터를 올라갔을 때..
안녕하세요! 네로입니다. 블로그를 손 놓기가 싫어서... 뭘 쓸까 하다가, 개발이든 연구든 데이터 다루는 작업을 하다보니 자주 사용하는 코드와 요령들이 있더라구요. 그래서 그러한 내용들을 좀 보기 쉽게 기록겸, 공유겸 적어두려고 합니다. 이게 그 첫번째 게시물이 되겠네요. Python언어를 기반으로 작성을 할거고, 초보분들이 따라하시기 좋게 작성이 될 겁니다. 흔히, 데이터라고 하면 표 모양으로 구조화되어 있는 엑셀 파일 등을 떠올리게 될 겁니다. 이러한 표 데이터를 다른 사람에게 전달하거나 내가 보기 좋게 저장하는 과정에서 CSV 파일을 많이 활용하게 되는데요, 오늘은 이 CSV 파일을 Python으로 불러오고 쓰는 방법(들)을 간단히 정리해보겠습니다. CSV 파일이란? CSV란, Comma-seper..
https://www.acmicpc.net/problem/2805 2805번 문제는 백준 알고리즘의 이분 탐색 단계에 속하는 비교적 낮은 성공률의 문제입니다. 문제의 성공률이 낮아 어려울까 생각을 했었는데, 이분 탐색의 개념을 그대로 적용할 수만 있다면 난이도가 높은 문제는 아니었습니다. 이분 탐색은 매 스텝마다 탐색의 범위를 절반씩 줄여나가며 정답으로 가까워지는 탐색 방법으로 탐색 방법 중 매우 빠른 속도를 자랑하는 알고리즘입니다. 흔히, 오름차순으로 이루어진 배열에서 원하고자 하는 값을 찾을 때 이분 탐색을 사용해 빠르게 찾아내는 것을 예시로 들어 설명하는 것 같았습니다. 저는 이분 탐색의 개념을 이 블로그에서 쉽게 알 수 있었는데요, 그림으로 차근차근 설명이 되어 있으니 공부하실 때 참고하시면 좋을..
https://www.acmicpc.net/problem/1027 1027번 문제는 겉보기에 그렇게 어렵지 않게 보이지만, 약간의 수학적인 아이디어가 필요한 문제입니다. 여기서 사용된 수학적인 아이디어란, 어떤 건물에서 다른 건물을 볼 수 있는 조건이 수학적으로 어떻게 해석되느냐? 에 대한 답을 할 수 있어야 한다는 것이었네요. Hint! 문제에서는 어떤 건물(x1, y1)에서 다른 건물(x2, y2)을 볼 수 있으려면, 두 건물을 이은 선분이 다른 건물을 지나거나 접하지 않아야 한다고 했습니다. 아래의 그림은 임의의 한 건물을 기준으로 오른쪽을 볼 때, 볼 수 있는 건물들이 무엇이 있는지 보여준 것입니다. 아이디어 설명을 위해 그렸네요. 우선, 빨간색 건물을 기준으로 본다고 할 때, 저는 이 건물의 오..
https://www.acmicpc.net/problem/1026 1026번 문제는 보물이라는 이름으로 소개되어 있습니다. 어렵지 않은 문제였고, 다만 저는 문제를 풀 때 두가지 방법이 생각이 났었네요. Hint! 이 문제에서 주어진 것처럼, A는 재정렬을 해야하는 수열, B는 그대로 있어야 하는 수열입니다. S는 두 배열의 각 원소끼리 곱하여 더하는 수식을 의미합니다. (임의로 배열을 설정하고 수식에 적용하시면 알 수 있습니다.) 두 배열의 각 원소끼리 곱하여 더했을 때, 최소가 되는 상황은 한 원소가 크면 클수록 곱해지는 다른 원소는 작아져야 한다는 것입니다. 문제의 예제와 힌트를 보면, 재정렬된 A는 B의 원소들 중 가장 큰 원소 (8)를 A 원소들 중, 가장 작은 수(0)와 매치하고 그 다음 큰 ..
https://www.acmicpc.net/problem/1629 이번 문제는 분할 정복 개념을 공부하기 위해 백준 알고리즘의 단계별 문제 풀이에서 고른 성공률 25%의 곱셈이라는 문제입니다. 음.. 이 문제를 풀면서 느꼈던 것은 분할 정복의 개념 자체는 쉽지만 이 개념을 어떻게 적용하는지는 쉽지 않다는 것입니다. 마치, 고등학교 때 미적분 기본 개념들을 숙지해도 수능의 29, 30번 문제는 어떻게 푸는지 감이 잘 안잡히는... 그런 느낌이었습니다. 아이디어가 떠오르면 어떻게든 하면 되는데? 그 아이디어가 생각나기까지는 어느 정도 직관이 필요한 것 같습니다. 분할 정복이란? 분할 정복이란, 말 그대로 분할하고 정복하여 답을 구해내는 알고리즘 기법입니다. 당연한 말이잖아... 좀 더 풀어 설명하면, 주어진..
https://www.acmicpc.net/problem/10951 백준 문제 번호 순서대로 푸는 것이... 그닥 좋은 것 같지 않아서 단계별로 풀고 있습니다. (쉬운 문제가 정말정말 많군요 ㅠㅠ, 순위 팍팍 올려버뤼기~) 쉬운 대부분의 문제는 스킵하고 살짝 테크닉이 들어간 문제들을 리뷰하려고 합니다. 10951 문제.. 사실 별건 아니고, while문을 사용하는 단계에 있는 기본 문제인데 사용자의 `input`이 없을 경우 while문을 어떻게 빠져나오는지 몰라서 구글링 했다는 그런... 자존심 살짝 상한 일이 있어서 살포시 적고 갑니다. 채점 컴퓨터의 `input`이 없는 경우 런타임 에러가 발생하는 것을 확인할 수 있었습니다. 따라서, 인풋을 진행을 할 때 런타임 에러가 발생하는 경우 사용자의 입력..
https://www.acmicpc.net/problem/1931 이번 문제는 Greedy 알고리즘에 대한 개념을 공부하기 위해 선정된 1931번 회의실 배정 문제입니다. Greedy 알고리즘이 이름이 생소해서 시간이 좀 걸릴까 했는데, 개념 자체는 그렇게 어렵지 않고 그 개념을 그대로 이해해서 풀 수 있는 문제여서 적절히 잘 배운 것 같습니다. Greedy 알고리즘, 탐욕 알고리즘은 매 순간마다 최적의 답을 찾아가는 알고리즘입니다. 보통 이전에 리뷰한 Dynamic Programming(DP)과 비교가 되곤 하는데요, 되도록 모든 경우에 대해 탐색을 해서 전체의 해결책을 찾는 DP와는 달리 탐욕 알고리즘은 지금 당장의 분기마다 최적의 답만 찾아간다는 것이 다릅니다. 1분의 시간이 있는데, 지금 당장 바..
https://www.acmicpc.net/problem/2178 2178번 문제는 알고리즘 스터디에서 BFS 주제로 잡은 문제입니다. 기본적인 BFS 문제인 것으로 생각이 될 정도의 난이도인 것 같고 연습하기에 좋은 것 같습니다. Breadth First Search(너비 우선 탐색)의 줄임말인 BFS는 깊이 우선 탐색인 DFS 와 함께 소개가 되고는 합니다. 노드를 전부 탐색한다는 점에서 비슷하지만 탐색하는 방식의 차이 때문에 각각의 방법으로 풀 수 있는 문제가 구분되기도 하기 때문인데요, 미로에서 시작 지점부터 도착 지점까지 최소거리를 구하는 이번 문제가 대표적인 BFS 문제로 여겨지는 것 같습니다. BFS는 DFS와는 달리 재귀적인 함수의 형태를 가지지 않는 점과, Queue 자료 구조를 사용한다..