Stay Hungry Stay Foolish

분류 전체보기 430

[Programmers] L2. 귤 고르기 (Greedy/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ 귤의 종류별 개수 파악귤의 크기별로 몇 개씩 있는 개수를 센다. (Counter() 함수 이용)from collections import Countertangerine = [1, 3, 2, 3, 2, 4, 4, 4, 4]print(Counter(tangerine))출력 결과 : Counter({4: 4, 3: 2, 2: 2, 1: 1})2️⃣ 개수를 기준으로 정렬귤의 개수를 내림차순으로 정렬한다. 이는 개수가 많은 종류부터 선택하도록 하기 위함이다.위 예시에서 내림차순으로 정렬하면 [(4, 4), (3, 2), (2, 2)..

[Algorithm] Two-Pointers(투 포인터)

투 포인터배열이나 리스트를 탐색할 때, 두 개의 포인터를 사용하여 효율적으로 문제를 해결하는 알고리즘 기법이다. 주로 정렬된 배열에서 특정 조건을 만족하는 값을 찾거나, 구간 합을 계산하는 문제 등에 사용된다.효율적 : 정렬된 배열에서 탐색 시 O(n) 으로 해결 가능간단한 구현 : 포인터 이동만으로 문제 해결 투 포인터 개념포인터(Pointer) : 배열의 특정 인덱스를 가리키는 변수두 개의 포인터를 배열의 양 끝 또는 특정 시작점과 끝점에 두고, 포인터를 이동시키며 문제를 해결 사용 조건배열이 정렬된 경우가 많을 때특정 구간이나 두 값의 합을 계산할 때 효율적으로 탐색할 필요가 있을 때 대표적인 동작 방식시작과 끝 포인터 사용 (양 끝에서 이동)배열의 가장 왼쪽과 오른쪽 끝에 포인터를 둔 뒤, 조건에..

알고리즘 2024.11.15

[Programmers] L2. 구명보트 (Python/투 포인터)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ 정렬  (O(nlog⁡n)시간) 사람들의 몸무게 리스트를 오름차순으로 정렬한다.이렇게 하면 가장 가벼운 사람과 가장 무거운 사람을 효율적으로 짝지을 수 있다.2️⃣ 투 포인터 사용 (O(n) 시간) 리스트의 가장 가벼운 사람(왼쪽 포인터)과 가장 무거운 사람(오른쪽 포인터)을 확인한다.두 사람의 몸무게 합이 보트의 무게 제한을 초과하지 않으면, 두 사람을 한 보트에 태운다(양쪽 포인터를 이동).3️⃣ 혼자 태우기두 사람의 몸무게 합이 무게 제한을 초과하면, 가장 무거운 사람만 보트에 태우고 오른쪽 포인터를 이동한다.4️⃣ ..

[BOJ] 2460. 지능형 기차 2 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/2460풀이 방법내릴 때는 빼고, 탈 때는 더한다.그리고 연산 결과를 max() 함수를 통해 최댓값을 갱신한다. 최댓값 갱신result = max(result, max_on) Solutionget_off, get_on = [], []for _ in range(10): off, on = map(int, input().split()) get_off.append(off) get_on.append(on)result, max_on = 0, 0for off, on in zip(get_off, get_on): max_on -= off max_on += on result = max(result, max_on)p..

[BOJ] 3460. 이진수 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/3460풀이 방법1️⃣ 이진수 변환format(int(input()), 'b')변환 결과 타입은 정수형이 아닌 str 이다.2️⃣ 뒤집기문자열[::-1]슬라이싱을 이용해 전체를 한번에 뒤집는다. [[파이썬] 이진법, 이진수, 2진수 변환 방법] 🔗 https://dev-cloud.tistory.com/416SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): n = format(int(input()), 'b')[::-1] # 양의 정수 n -> 이진수 변환 -> 뒤집기 result = [] # 결과를 담을 리스트 for i in ..

[파이썬] 이진법, 이진수, 2진수 변환 방법

이진법 변환 방법 1️⃣ bin() 함수 사용bin() 함수는 숫자를 2진법 문자열로 변환하여 반환n = 5binary_str = bin(n) # 결과: '0b101' 2️⃣ format() 함수 사용format() 함수의 'b' 포맷 코드를 사용하여 2진법 문자열을 얻을 수 있다.n = 5binary_str = format(n, 'b') # 결과: '101' 3️⃣ f-string을 사용한 포맷팅f-string 안에서도 :b를 붙여서 2진법으로 출력할 수 있다.n = 5binary_str = f"{n:b}" # 결과: '101' 4️⃣ bin() 함수 + 슬라이싱bin() 함수의 결과에서 접두사 '0b'를 제거하기 위해 슬라이싱을 사용할 수 있다.n = 5binary_str = bin(n)[2:]..

알고리즘 2024.11.15

[BOJ] 2501. 약수 구하기 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/2501풀이 방법약수 구하기N의 약수를 모두 찾기 위해 1부터 N의 제곱근 까지의 수 i를 확인한다.만약 i가 N의 약수라면 i 와 N / i 를 약수 리스트에 추가한다. 이때, i와 N / i 가 같지 않으면 중복을 피하기 위해 둘 다 추가한다.예를 들어 N이 36일 때, 약수로 6이 두 번 나올 수 있기 때문이다.정렬약수를 모두 찾은 후, 작은 순서로 정렬하여 K번째 작은 약수를 찾는다.출력약수의 개수가 K 보다 크거나 같다면, 정렬된 리스트에서 K 번째 약수를 출력한다.약수의 개수가 K 보다 적다면 0을 출력한다.✔️ 정렬 방법sorted(divisor)리스트 혹은 문자열 등을 내장함수로 이용해 정렬할 수 있다.sort()..

[TIL] 2024년 11월 14일

파이썬TypeError: slice indices must be integers or None or have an __index__ method타입이 맞지 않아서 발생한 에러이다. 다음은 위 에러가 난 코드이다. N = info[0]for i in info[1:N:2]: ...현재 N은 str 형이다. 그래서 slice 를 사용하려고 할 때 에러가 난 것이다.슬라이싱 할 때는 int 타입만 넣을 수 있다. 해결 방법N = int(info[0])int 형으로 변환하면 에러가 나지 않는다.📜 작성한 게시글[SWEA 코딩테스트 3260. 두 수의 덧셈] 👉 https://dev-cloud.tistory.com/409 [SWEA 코딩테스트 4047. 영준이의 카드 카운팅] 👉 https://dev-clou..

TIL 2024.11.15

[SWEA] 3975. 승률 비교하기 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이 방법💡 테스트 케이스마다 출력하지 말고 결과를 모아서 한번에 출력하기 (시간 초과 문제) 테스트 케이스 번호와 함께 리스트에 담는 방법results.append(f"#{test_case} DRAW") 저장한 결과를 개행문자와 함께 출력하는 방법print("\n".join(results))SolutionT = int(input()) # 테스트 케이스 수results = [] # 결과를 저장할 리스트for test_case in range(1, T + 1): A, B, C, D = map(int, input().split()) al..

SWEA 2024.11.15

[SWEA] 9280. 진용이네 주차타워 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이 방법주차장과 대기열 설정주차장 리스트, 대기열 리스트, 주차 요금을 저장할 리스트를 생성한다.차량 입출차 처리차량이 입차할 때(car > 0)주차장에 여유가 있는 경우(0 in parking) 비어있는 첫 번째 주차 공간에 차량을 저장하고 요금을 계산한다.주차장이 가득 찬 경우(0 not in parking) 해당 차량을 대기열 리스트에 추가한다.차량이 출차할 때(car 주차장 리스트에서 나가는 차량의 인덱스를 찾아 해당 공간을 비운다. (index() 사용)해당 공간을 0으로 만든다.대기 중인 차량이 있는 경우, 대기 차량 중 가장 먼저 대기..

SWEA 2024.11.14

[SWEA] 16800. 구구단 걷기 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이 방법💡 약수 이용하기 N 이 10 일 경우 최소 이동 경로는 다음과 같다. 아래 그림은 곱셈표이다.  2와 5는 10의 약수와 같다. 따라서 10의 약수를 구해야 하는데, 두 수의 곱의 차가 가장 작은 i와 j 를 구해야 한다. (1, 1) 에서 (2, 5) 까지 가려면, i는 2가 되어야 하고, j는 5가 되어야 한다. i ➜ 2 - 1 = 1j ➜ 5 - 1 = 4 따라서 답은 1 + 4 = 5 이다.SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): N = ..

SWEA 2024.11.14

[SWEA] 4047. 영준이의 카드 카운팅 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이 방법카드 입력 분할 및 초기화S, D, H, C = [0]*13, [0]*13, [0]*13, [0]*13S, D, H, C의 네 가지 무늬에 대해 각각 13칸짜리 리스트를 만든다.각 리스트는 13개의 인덱스를 가지며, 각 인덱스는 카드 번호(1~13)에 대응되도록 한다.카드 읽고 카운팅 for i in range(0, len(card), 3): shape = card[i] # 카드 종류 num = int(card[i + 1:i + 3]) # 카드 수 ...카드 입력 문자열을 3글자씩 슬라이싱해 카드의 ..

SWEA 2024.11.14

[SWEA] 1873. 상호의 배틀필드 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.comSolution# 방향에 따른 전차 모양 및 이동 (북, 남, 서, 동)tank_direction = {'^': 0, 'v': 1, '': 3}direction_symbols = ['^', 'v', '']dx = [-1, 1, 0, 0] # 상, 하, 좌, 우 이동 (북, 남, 서, 동)dy = [0, 0, -1, 1]# 명령어 수행def execute_commands(H, W, game_map, commands): # 전차 위치 찾기 for i in range(H): for j in range(W): i..

SWEA 2024.11.13

[SWEA] 10580. 전봇대 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이 방법💡 전선이 교차하려면 서로 다른 두 전선 (x, y)와 (i, j)에 대해, 다음 조건이 성립해야 한다.x j (왼쪽 끝점은 더 왼쪽에 있지만, 오른쪽 끝점은 더 아래쪽에 있음)또는 x > i 이면서 y  입력 받기각 전선의 (A, B) 좌표를 리스트 a, b에 각각 저장한다.교차 조건 체크각 전선 (x, y)와 다른 전선 (i, j)의 좌표를 비교하여, 교차 조건이 성립하는지 확인한다.교차 조건이 성립할 때마다 result 값을 증가시킨다.출력하기각 테스트 케이스에 대한 result 값을 출력한다.SolutionT = int(input..

SWEA 2024.11.13