[Python] 백준/BOJ 14650번: 걷다보니 신천역 삼 (Small) (Silver 2)
·
Algorithm/백준 (BOJ)
💻 Problem문제 보러 가기 욱제는 ‘삼’이란 음절을 참 좋아한다. 인삼, 홍삼, 해삼, 삼성, 이춘삼(李春森), 삼식이, 삼시세끼, ㄴㄴ 그거 안 삼, 삼과 죽음, 알았삼, 금강삼도 식후경, 걷다보니 신천역 삼, 그리고 특히 일이삼을 좋아한다. 그래서 욱제는 3을 가지고 놀아보기로 했삼.3개 숫자(0, 1, 2)만 가지고 N자리 3의 배수를 만들어 보삼. 만드는 배수는 자연수 이삼. 0으로 시작하는 수는 만들 수 없는 수 이삼. 3의 배수가 몇 개나 나올 수 있삼?N을 입력 받으삼. (1 ≤ N ≤ 9) 💡 Approach중복 순열로 N자리 수를 뽑은 다음 0으로 시작하지 않는 3의 배수이면 횟수를 센다.사실 파이썬 itertools 모듈은 순열(permutations), 조합(combinati..
[Python] 백준/BOJ 1189번: 컴백홈 (Silver 1)
·
Algorithm/백준 (BOJ)
💻 Problem문제 보러 가기 한수는 캠프를 마치고 집에 돌아가려 한다. 한수는 현재 왼쪽 아래점에 있고 집은 오른쪽 위에 있다. 그리고 한수는 집에 돌아가는 방법이 다양하다. 단, 한수는 똑똑하여 한번 지나친 곳을 다시 방문하지는 않는다. cdef ...f ..ef ..gh cdeh cdej ...f bT.. .T.e .Td. .Tfe bTfg bTfi .Tde a... abcd abc. abcd a... a.gh abc. 거리 : 6 6 6 8 8 10 6위 예제는 한수가 집에 돌아갈 수 있는 모든 경우를 나타낸 것이다. T로 표시된 부분은 가지 못하는 부분이다. 문제는 R x C 맵에 못 가는..
[Python] 백준/BOJ 13422번: 도둑 (Gold 4)
·
Algorithm/백준 (BOJ)
💻 Problem문제 보러 가기 다음 그림과 같이 N개의 집이 순서대로 이웃하여 세워진 마을이 있다.위 그림은 N = 8인 경우 마을의 모습이다. 위 그림과 같이 각각의 집은 순서대로 서로 이웃해 있으며, 첫 번째 집과 마지막 집 또한 이웃해 있다. 예를 들면 3이 적힌 집은 9, 4가 적힌 집과 이웃해 있으며, 5가 적힌 집은 6, 7이 적힌 집과 이웃해 있다. 이 마을 사람들은 각자 자신의 집에 돈을 보관한다. 위 그림에서 각 집에 적혀 있는 숫자는 집마다 보관 중인 돈의 금액을 나타낸다. 어느 날 이 마을에 도둑이 들었다. 도둑은 이 마을에서 어떻게 도둑질을 할까 잠시 고민하다가, 빠르게 돈을 훔치고 달아나기 위해 M개의 연속된 집에서 돈을 훔치되, 돈을 훔칠 때는 각 집에 보관 중인 돈을 전부 ..
[Python] 백준/BOJ 6219번: 소수의 자격 (Silver 3)
·
Algorithm/백준 (BOJ)
💻 Problem문제 보러 가기 농부 존은 소들에게 소수로 차례차례 번호를 매기는 중이다. 베시는 이 번호에서 숫자 D가 몇 번이나 등장하는지 궁금해졌다.베시를 도와 범위 A..B(A와 B 포함)내에서 숫자 D를 포함하는 소수의 개수를 구해보자.소수는 두개의 자연수(1과 자기 자신)로만 나누어 떨어지는 자연수를 말한다. 소수의 예로는 2,3,5,7,11,13,17,19,23,29.. 가 있다.1 ≤ A ≤ B ≤ 4,000,000B ≤ A + 2,000,000 💡 Approach처음엔 그냥 반복문으로 단순하게 소수 구하는 방법으로 풀었더니 1%에서 시간초과 떴다.더보기import sysinput = sys.stdin.readlinedef is_include(n): if str(D) in str(..
[Python] 백준/BOJ 2784번: 가로 세로 퍼즐 (Silver 2)
·
Algorithm/백준 (BOJ)
💻 Problem문제 보러 가기 아래와 같은 가로 세로 퍼즐을 풀어보자. 6개의 단어가 주어졌을 때, 이를 가지고 가로 세로 퍼즐을 만드는 프로그램을 작성하시오. 단어 3개는 가로줄, 3개는 세로줄로 배치해야 한다. 6개의 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 이 단어는 사전순으로 정렬되어 있다. ✏️ Solution 1내가 처음 풀이한 방법은 아래와 같다.6개의 단어 중 3개를 뽑는다. (가로 단어로 사용)순서가 있으므로 순열이다.가로 단어로 퍼즐을 만들어서 세로 단어를 추출한다.추출한 세로 단어 조합과 (1)에서 뽑히지 않은 단어 조합이 같다면 퍼즐이 완성된다.이거 풀면서 고민을 많이 했다.. 머리 아팠음 ㅠ선택되지 않은 단어들이 가로 단어에서 뽑은 세로 단어들과 같은지 비교를 어떻게 ..
[Python] 백준/BOJ 1270번: 전쟁 - 땅따먹기 (Silver 3)
·
Algorithm/백준 (BOJ)
💻 Problem문제 보러 가기 드디어 전쟁은 전면전이 시작되었고, 서로 땅을 따먹기 시작했다.현재 여러 지역은 한창 전쟁이 벌어지고 있는 상황인데, 어느 지역은 거의 전쟁이 마무리 단계로 가고 있다.하지만 당신은 군대를 보낼 때 적군을 혼란시키기 위해서 우리나라의 군대라는 걸 표시하지 않고, 군대의 번호로 표시했다.어느 땅에서 한 번호의 군대의 병사가 절반을 초과한다면 그 땅은 그 번호의 군대의 지배하에 놓이게 된다.이때, 각 땅들을 지배한 군대의 번호를 출력하여라. 만약, 아직 전쟁이 한창 중인 땅이라면 “SYJKGW”을 쌍 따옴표 없이 출력한다. 💡 Approach파이썬의 Counter를 활용해 각 군대 번호가 몇 번 등장하는지 센다.가장 많이 등장한 군대의 횟수가 과반수를 넘으면 해당 군대 번..
[알고리즘/자료구조] 힙(Heap)
·
Algorithm/이론
📒 힙(heap)완전 이진 트리(Complete Binary Tree)최소 힙: 부모 노드의 키 값이 자식 노드의 키 값보다 항상 작은 힙 (루트가 가장 작음)최대 힙: 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큰 힙 (루트가 가장 큼) 📒 힙 자료구조 구현heapq 모듈 이용heapq.heappush(heap, item): item을 heap에 추가heapq.heappop(heap): heap에서 가장 작은 원소를 popreturn 하지 않고 접근만 하려면 인덱스로 접근heapq.heapify(x): 리스트 x를 즉각적으로 heap으로 변환함 ✏️ heapq 모듈을 이용하여 최소 힙 구현heapq 모듈은 기본적으로 최소 힙으로 구현되어 있음import heapqheap = []heapq.h..
[Python] 백준/BOJ 1715번: 카드 정렬하기 (Gold 4)
·
Algorithm/백준 (BOJ)
💻 Problem문제 보러 가기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장의 숫자 카드 묶음을 합치려면 50번의 비교가 필요하다.매우 많은 숫자 카드 묶음이 책상 위에 놓여 있다. 이들을 두 묶음씩 골라 서로 합쳐나간다면, 고르는 순서에 따라서 비교 횟수가 매우 달라진다. 예를 들어 10장, 20장, 40장의 묶음이 있다면 10장과 20장을 합친 뒤, 합친 30장 묶음과 40장을 합친다면 (10 + 20) + (30 + 40) = 100번의 비교가 필요하다. 그러나 10장과 40장을 합친 뒤, 합친 50장 묶음과 20장을 합친다면 (10 + ..