Stay Hungry Stay Foolish

전체 글 423

[Programmers] L2. 카펫 (완전탐색/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 약수 쌍으로 너비와 높이 찾기 1️⃣ 전체 격자 수 계산total = brown + yellow2️⃣ 약수 쌍 찾기total의 약수를 순회하면서 (width, height) 쌍을 구한다.3️⃣ 노란색 격자 조건 확인노란색 격자는 갈색 테두리 안에 있어 (width - 2) * (height - 2) == yellow를 만족해야 한다.4️⃣ 정답 반환조건을 만족하는 (width, height) 쌍을 [width, height] 형태로 반환한다.Solutiondef solution(brown, yellow): square ..

[Programmers] L2. 짝지어 제거하기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 스택 이용 스택이 비어있으면 스택에 값을 넣는다.스택의 맨 마지막 요소가 현재 문자와 같으면 꺼낸다.위 조건이 다 맞지 않으면 스택에 현재 문자를 넣는다.  Solutiondef solution(s): stack = [] for i in s: if not stack: # 스택이 비어있으면 stack.append(i) continue if stack[-1] == i: # 스택 맨 뒤 요소와 같으면 stack.pop() ..

[TIL] 2024년 11월 10일

파이썬n 개의 배열을 만들고자 할 때 안 되는 예시fibo = []*n fibo = []*n는 리스트를 만들지만, 이 방식은 n개의 배열을 만들지 않는다. 실제로는 빈 리스트에 n을 곱한 결과로, 빈 리스트가 유지된다.  💡 n개의 빈 요소 리스트를 만들고 싶다면  1️⃣ None을 포함한 길이 n의 리스트를 생성fibo = [None] * nprint(fibo) # 출력: [None, None, None, None, None]  2️⃣ 특정 값으로 초기화된 길이 n의 리스트 생성fibo = [0] * nprint(fibo) # 출력: [0, 0, 0, 0, 0]  피보나치 수 1️⃣ 1234567로 나누는 이유값의 크기 제한피보나치 수는 순서가 커질수록 매우 빠르게 증가하기 때문에, 큰 숫자를 계..

TIL 2024.11.11

[SWEA] 1940. 가랏! RC카! (Python/D2)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이 방법입력 설명3 # 명령어 개수1 2 # 명령어, 속도2 10명령어 개수가 3일 때, 그 다음줄부터 3번의 명령이 주어진다.명령어가 1 혹은 2일 때 추가로 속력이 주어지고, 0일 때는 주어지지 않는다.예시5 1 2 1 2 2 100첫 줄 명령어가 1이므로, 2만큼 가속한다. 그래서 현재 속도은 2이다.두 번째 줄 명령어가 1이므로, 2만큼 가속한다. 현재 속력 + 가속도 = 2 + 2 = 4이다. 따라서 현재 속도는 4이다. 세 번째 줄 명령어가 2이므로, 1만큼 감속한다. 현재 속력 4에서 감속할 속도 1을 뺀다. 그래서 현재 속도는 3..

SWEA 2024.11.10

[SWEA] 2005. 파스칼의 삼각형 (Python/D2)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이 방법💡 규칙을 보자 맨 처음과 맨 끝은 항상 1이다.가운데 숫자는 인덱스와 일치한데, 그 수의 개수는 인덱스 - 1 과 일치하다.이 규칙을 참고해서 리스트에 append() 하고 출력한다.SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): N = int(input()) print(f"#{test_case}") print(1) for i in range(1, N): pascal = [0] pascal[0] = 1 ..

SWEA 2024.11.10

[Programmers] L2. 피보나치 수 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 fibo[0] = 0, fibo[1] = 1 미리 정의 피보나치 수열에서 첫 두 항, 즉 fibo[0] = 0과 fibo[1] = 1은 시작값이자 수열의 정의에 해당하기 때문에 따로 저장한다. 이들은 피보나치 수열을 계산하는 기초가 된다. 이유는 다음과 같다.재귀적 정의 : 피보나치 수열은 F(n) = F(n − 1) + F(n − 2) 로 정의되며, F(0) = 0과 F(1) = 1 이 없으면 이후의 모든 피보나치 수를 계산할 수 없다. fibo[0]과 fibo[1]이 초기화되지 않으면, 재귀적 연산을 시작할 수 없게 된다..

[TIL] 2024년 11월 09일

파이썬이진법 변환 방법 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)[..

TIL 2024.11.10

[TIL] 2024년 11월 08일

파이썬리스트, 큐, 스택이 비어있는지 확인하는 방법 1️⃣ 방법 1if stack: # 스택이 비어있지 않으면  2️⃣ 방법 2if len(stack) == 0: 간단하게 방법 1을 쓰도록 하자.  배열끼리 최대 최소를 비교할 때만일 배열 두 개를 비교하여 min() 함수를 사용했을 때 무슨 기준으로 결과를 반환하는지 확인하자. min(A, B)는 A와 B를 사전순(lexicographical)으로 비교하여 첫 번째로 사전순으로 작은 리스트를 반환한다. 여기서 사전순 비교는 두 리스트의 각 요소를 앞에서부터 순차적으로 비교하며, 첫 번째로 다른 값이 나타나는 위치에서 더 작은 값을 가진 리스트가 "작다"고 판별된다.A = [1, 4, 2]B = [5, 4, 4]print(min(A, B)) # [1,..

TIL 2024.11.09

[Programmers] L2. 이진 변환 반복하기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법2진법 변환 방법 1️⃣ format 함수 이용n = 5binary_str = format(n, 'b') # 결과: '101' 2️⃣ bin() 함수 사용 n = 5binary_str = bin(n) # 결과: '0b101'  3️⃣ f-string을 사용한 포맷팅 n = 5binary_str = f"{n:b}" # 결과: '101' Solutiondef solution(s): zero, num, cnt = 0, 0, 0 # 0의 개수, 2진법 길이, 변환 횟수 while True: cnt += 1 ..

[SWEA] 20551. 증가하는 사탕 수열 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이 방법💡 B ➜  A 순으로 조건을 확인하고 처리 B 부터 확인B 가 C 보다 크거나 같으면, B 를 1 감소시키고, 결과값을 1 누적하며 증가시킨다.감소시키다가 B 가 C 보다 작아지면 루프를 중단시킨다.추가로, B 가 1 보다 작아지면 루프를 중단한다.A 도 마찬가지로 B 와 비교하며 루프를 돌게 한다. 루프가 끝나면 다음 조건을 추가한다. A 와 B 가 같거나, A 와 C 가 같으면 결과에 -1 을 저장한다. SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): ..

SWEA 2024.11.08

[Programmers] L2. JadenCase 문자열 만들기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법📌주의할 점 : 공백이 여러개 일 때 1️⃣ 주어진 문자열을 split(' ')로 나누어 각 단어와 공백을 유지한 채 리스트에 담는다. 2️⃣ 리스트의 각 단어를 확인하면서,단어가 비어 있지 않다면 첫 문자를 대문자로 변환하고, 나머지 문자는 소문자로 변환한다.첫 문자가 알파벳이 아닌 경우는 그대로 둔다.3️⃣ 변환된 단어 리스트를 다시 공백을 기준으로 문자열로 합쳐 반환한다. 대문자로 변환하는 방법s.upper() 소문자로 변환하는 방법s.lower() Solutiondef solution(s): words = s.spl..

[Programmers] L2. 최솟값 만들기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 A 리스트의 최소와 B 리스트의 최대의 곱, sort() 사용 A 리스트는 오름차순 정렬, B 리스트는 내림차순 정렬한다. 오름차순 정렬A.sort() 내림차순 정렬B.sort(reverse=True) 리스트의 길이만큼 반복문을 돌려 연산을 한다. Solutiondef solution(A, B): answer = 0 A.sort(), B.sort(reverse=True) # 정렬 for i in range(len(A)): answer += A[i] * B[i] return answer  ?..

[Programmers] L2. 올바른 괄호 (스택/큐/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법1️⃣ ")" 를 만날 때 까지 "(" 를 큐에 넣는다.queue.append(n) 2️⃣ ")" 를 만나면 큐의 맨 뒤에서부터 "(" 를 꺼낸다.단, "(" 를 꺼내기 전에 큐가 비어있지 않은지 확인한다. 큐가 비어있으면 꺼내려고 할 때 에러가 난다.큐가 비어있지 않으면 꺼내고 비어있으면 반복문을 중단시킨다.처음부터 ")" 를 만나면 문자열을 끝까지 확인해도 올바르게 짝지어지지 않기 때문이다. queue.pop() 3️⃣ 큐가 비어있지 않으면 False를 반환하고, 비어있으면 True를 반환한다.  ★ True 예시큐가 비어있으..

[TIL] 2024년 11월 07일

파이썬코드 비교 1️⃣ 컴프리헨션 사용def correct(student_answer, answers): return sum(1 for i, ans in enumerate(answers) if ans == student_answer[i % len(student_answer)])sum(1 for ...)에서 1은 각 조건이 True일 때 더할 값이다.sum 함수는 조건에 맞는 모든 1 값을 합산하므로, 결과적으로 += 1과 같은 효과를 낸다. 2️⃣ 컴프리헤션 사용 Xdef correct(student_answer, answers): count = 0 for i, ans in enumerate(answers): if ans == student_answer[i % len(stud..

TIL 2024.11.07

[BOJ] 5212. 지구 온난화 (Python/구현/Silver 2)

[문제 링크] 👉https://www.acmicpc.net/problem/5212 풀이 방법 이 문제는 주어진 지도를 미래의 상태로 변형하고, 불필요한 바다 부분을 제거해 가장 외곽의 땅만 출력하는 문제이다. 1️⃣ 초기값 설정dx = [1, 0, -1, 0] # x(행) dy = [0, -1, 0, 1] # y(열) future_map = [["."]*C for _ in range(R)] # 미래 지도 생성지도를 순회하면서 각 X(땅) 주위에 바다가 3칸 있으면 땅이 잠기도록 한다.새로운 미래 지도를 future_map 이라고 하고, 모두 "." (바다)가 담긴 2차원 배열에 생성한다.dx, dy 는 상하좌우 확인에 필요한 좌표이다. 2️⃣ 미래 지도 생성for x in range(R): ..