프로그래머스 - 대소문자 바꾸기 - C++ Python

프로그래머스 대소문자 바꾸기 문제 바로가기 알고리즘 공부를 하다보니 여러 가지 풀이를 참고하기 위해서는 C++도 공부하는게 좋다는 생각을 하게 되었다. 특히 LeetCode 같은 경우 Python에 비해서 C++이 고품질의 자료도 많고 시간 제약에서도 여유로워질 수 있어서 새로운 언어를 공부하기로 했다. Pointer 개념 말고는 생각보다 문법이 유사해서 기본 문법은 두 시간 정도만에 익힐 수 있었다. (라이브러리 익히는데는 경험치가 많이 필요하겠지만) C++에 대해서는 여러 책들과 강의들이 많지만 개인적으론 간단하게 익히는 선에서는 W3Schools Tutorial가 좋았다. 기본 문법을 익힌 다음에 쉬운 문제에서부터 풀어보기로 했다. 프로그래머스 기준으로 Lv.0 문제에서부터 시작해서 꾸준히 풀어볼 계획이다. ...

2023-8-7 · 2 min · 219 words · Junha

백준 2527번 - 직사각형

백준 2527번 문제 바로가기 나의 풀이 두개의 직사각형의 두 꼭짓점의 좌표가 주어지고, 이를 통해 두 직사각형의 위치관계를 파악하는 문제였다. 처음에는 주어진 x1, y1, p1, q1, x2, y2, p2, q2 좌표를 그대로 사용했다가 12% 정도 채점 하다가 틀렸습니다 에러가 발생했다. 생각해보니 예제처럼 앞의 직사각형의 항상 원점에 가까운 것은 아닌 경우도 있다는 것을 생각하게 되었다. (예제에 이런 케이스를 더 추가해주면 좋겠지만 아쉽다..) 그래서 직사각형별로 tuple로 묶어서 먼저 정렬해준 뒤에 좌표 간 관계를 분석해보았다. ...

2023-8-4 · 1 min · 213 words · Junha

프로그래머스 - 피로도

프로그래머스 피로도 문제 바로가기 나의 풀이 First Thoughts 어떤 기준에 따라 sort하면 최적 방법을 찾을 수 있지 않을까? (e.g key = lambda x : x[1]) -> 실패 그냥 bruteforce로 모든 경우의 수에 대해서 다 따져보자! 이를 위해서 itertools에서 permutations을 불러와서 모든 경우의 수를 따져주었다. math.perm()과는 달리 모든 경우의 수를 보여줘서 각 요소의 내용을 다뤄야할 때에는 매우 편리하다. from itertools import permutations as p def solution(k, dungeons): ans = 0 for dg in p(dungeons): hp = k cnt = 0 for d in dg: if d[0] > hp: break hp -= d[1] cnt += 1 ans = max(cnt, ans) return ans DFS 을 이용한 풀이 전혀 상상도 하지 못했는데 DFS을 이용한 풀이도 가능했다. 키포인트는 visited[j]를 1로 지정했다가 다시 0으로 바꿔주는 작업! ...

2023-8-4 · 2 min · 379 words · Junha

코스모스

광활한 우주를 담고 있는 표지와 책의 두께만으로 일단 압도되는 기분이 드는 책이다. 제목도 많이 들어봤고 도서관에서 책의 커버는 많이 봤지만, 읽기에는 왠지 모를 두려움이 엄습했다. 워낙에 유명한 과학책이지만 주변에서 어렵다는 말을 너무 많이 들었던 탓에 읽을 시도를 하지 않았다. 사실 고전이라고 이름 붙은 책들은 ‘제목은 유명하지만 막상 읽지 않은’과 동치라고 할 수 있다. ^^ 침묵의 봄, 코스모스, 이기적 유전자, 종의 기원 등 여러 분야의 과학 고전들이 존재하는데, 대략적인 내용만 건너 듣고 실제로 읽은 경험은 적다. 그런 의미에서 스스로 작은 프로젝트를 시작했는데, 바로 과학 고전 읽기 프로젝트! 첫 번째 도전장을 내민 곳은 바로 칼 세이건의 ‘코스모스’다. ...

2023-8-2 · 3 min · 476 words · Junha

프로그래머스 - 카펫

카펫 문제 바로가기 나의 풀이 문제를 해결하기 위해 끄적이다가 결국엔 약수를 구하는 아이디어로 접어들었다. 전체 넓이와 노란색 영역 넓이의 관계를 생각해보다가 다음을 만족한다는 사실을 발견했다. $ yellow_area = (width-2)*(height-2) $ 잘 이해되지 않는다면 다음 사진처럼 노란색을 움직인다는 아이디어로 접근해보자. def solution(brown, yellow): total = brown + yellow for i in range(3, total//2): if total % i == 0: width,height = (total//i),i if (width-2)*(height-2) == yellow: return (width, height) return -1 다른 풀이 구경하기 나는 넓이:넓이 관계에 집중했다면 다른 풀이에서는 넓이:둘레 상관관계로 접근한 것도 있었다. 전체 둘레에서 한 칸을 갈색 타일에 대응시키면 각 모서리(즉 4개)가 더블 카운팅되는데, $ 2*(height+width) = (brown - 4) $ 만족시키는지 확인하는 방법도 존재했다. ...

2023-8-1 · 1 min · 131 words · Junha