Algorithm 36

99클럽 코테 스터디 2일차 TIL - 백준 11561. 징검다리

백준 11561. 징검다리 / python / Silver 3 / 1h+문제 및 코드https://www.acmicpc.net/problem/11561T = int(input())tc = []for _ in range(T): tc.append(int(input()))for n in tc: start = 1 end = n answer = 0 while start 접근 방식징검다리가 n개 일 때, 처음 건넌 거리보다 다음번부터는 최소 1 이상 넘는 거리를 뛰어야 하므로 1 + 2 + 3 + ... + k 형태의 등차수열 합을 만족하는 건넌 횟수가 필요하다.등차수열의 합 구하는 공식은 k(k+1)/2 이므로 이분탐색으로 n에 가장 가까운 k를 구해주면 된다.후기이분탐색인지 알고 풀면..

99클럽 코테 스터디 1일차 TIL - 백준 1072. 게임

백준 1072. 게임 / node.js / Silver 3 / 51m문제 및 코드https://www.acmicpc.net/problem/1072const filePath = process.platform === "linux" ? "./dev/stdin" : "input.txt";let [x, y] = require("fs") .readFileSync(filePath) .toString() .trim() .split(" ") .map((num) => +num);let z = Math.floor((y * 100) / x);let left = 1;let right = 1000000000;let answer = Number.MAX_SAFE_INTEGER;while (left 접근 방식이분 탐색 알고리..

이분 탐색

이분 탐색이란이분탐색(Binary Search)은 정렬된 배열에서 원하는 값을 빠르게 찾기 위한 알고리즘입니다.시간 복잡도가 O(log⁡n)이기 때문에, 탐색 속도가 매우 빠르고 효율적입니다.이분탐색의 핵심 개념은 탐색 범위를 반씩 줄여가며 원하는 값을 찾아가는 데 있습니다.이분 탐색의 작동 원리초기 설정: 탐색 범위의 시작점 left와 끝점 right를 설정합니다. 처음에는 left는 배열의 첫 번째 인덱스, right는 마지막 인덱스로 설정합니다.중간값 계산: left와 right의 중간 인덱스 mid를 계산합니다. mid = (left + right) // 2.값 비교:중간값 arr[mid]가 찾고자 하는 값 target과 일치하면, mid를 반환하여 탐색을 종료합니다.arr[mid]가 target..

[python] 프로그래머스 level2. 마법의 엘리베이터

문제 https://school.programmers.co.kr/learn/courses/30/lessons/148653 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 10씩 나눈 몫이 0이 될때까지 반복문을 실행한다. 반복문 내에서는 1의 자리(10으로 나눈 나머지)가 5보다 큰 경우 & 1의 자리가 5이면서 10의자리가 5인 경우 10에서 1의 자리를 뺀 값을 answer와 storey에 더해준다. ex) storey = 955이면 955 -> 960 -> 1000 -> 0 (10) 955 -> 950 -> 1000 -> 0 (11) 55이면 5..

Algorithm/Greedy 2023.06.30

[python] 프로그래머스 level 2. [1차] 프렌즈4블록

문제 https://school.programmers.co.kr/learn/courses/30/lessons/17679 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 - 반복문을 통해서 2x2 크기의 정사각형 안의 4개 값이 모두 같다면 set에 넣어준다. (향후 중복된 좌표 없애주기 위해 set 사용) - set에 있는 좌표 값들은 '0' 처리 - 없어진 블록들은 아래로 땡겨준다. - 첫번째에서 찾은 블록의 갯수가 0개면 더 이상 블록을 없앨 수 없기 때문에 while문을 멈추고, 그동안 없앤 블록 갯수를 return 코드 def find_bloc..

[python] 프로그래머스 level2. 후보키

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42890 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 python으로 푼다면 set(집합) 자료구조를 잘 이용할 수 있어야한다. 먼저 유일성이고 뭐고 가능한 키 조합을 모두 구해준다. (시간될 때 itertools에서 제공하는 함수 말고 직접 구현해보기) 그 뒤에 아래 조건을 만족하도록 구현해준다. [유일성 : 릴레이션에 있는 모든 튜플에 유일하게 식별되어야 한다. ] 위에서 구한 인덱스로 구성된 키 조합을 각 속성값으로 대입하여 튜플로 ..

[python] 백준 Gold 5 7490번: 0 만들기

문제 https://www.acmicpc.net/problem/7490 7490번: 0 만들기 각 테스트 케이스에 대해 ASCII 순서에 따라 결과가 0이 되는 모든 수식을 출력한다. 각 테스트 케이스의 결과는 한 줄을 띄워 구분한다. www.acmicpc.net 접근 재귀로 모든 경우의 수를 구한 후, 0이 되는 경우만 출력해준다. 주의할 점은, 연산기호를 ' '(공백)으로 둘 때는 sum에 숫자를 더하지 않고, 숫자*10 + (i+1) (=> 앞의숫자에 다음숫자를 붙인것) 을 넘겨줘야한다. 마지막 턴일때 마지막으로 sum을 구해준 후, 0이되면 출력해준다. 코드 t = int(input()) def dfs(i, sum, sign, num, s): if i == n: sum += sign*num if ..

[python] 백준 Silver 2 18111번: 마인크래프트

문제 https://www.acmicpc.net/problem/18111 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net 접근 완전탐색 풀이 1. 주어진 블록의 층들 중, 최소와 최대층을 구해준다. 2. 최소~최대 사이에서 특정 i층으로 블록의 층들을 모두 같게 만들어준다. 현재 i층보다 블록의 층이 클 때 1번 작업을 실행해서 블록을 제거한 후, inventory에 담고, 초를 계산해준다. 반대로, 현재 i층보다 블록의 층이 작을 때 2번 작업을 실행해서, inventory에서 해당 블록만큼 빼고, 초를 계..

[python] 프로그래머스 level2 과제 진행하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/176962 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 stack을 사용한 구현풀이 시간내에 과제를 끝낸 경우에 stack을 거꾸로 순회하면서 과제를 수행한다. 마지막 과제에 도달했을 경우 stack에 남은 아직 수행하지 못한 과제를 거꾸로 순회하면서 수행해준다. 코드 def solution(plans): ans = [] for plan in plans: t,m = map(int, plan[1].split(":")) plan[1] = t*..

[python] 프로그래머스 level2 문자열 압축

문제 https://school.programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 완전탐색 문자열을 자를 수 있는 단위의 갯수는 1 ~ 문자열 길이 반 까지 가능하므로 이 모든 갯수를 확인해봐야한다. 예를 들어, 갯수가 3개라면 (s = abcabcdede ) turn 1) s1 = abc s2 = abc s1 == s2 이므로, count = 2 turn 2) s1 = abc s2 = ded s1 != s2 이므로, temp_s = 2abc turn 3) s1 = ..