Stay Hungry Stay Foolish

분류 전체보기 430

[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): ..

[Programmers] L1. 기사단원의 무기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법약수 구하기약수는 일반적으로 1부터 sqrt(i)까지만 확인하면 된다. 예를 들어, i가 36이라면 1 x 36, 2 x 18, 3 x 12, 4 x 9, 6 x 6 등의 약수를 가지며, sqrt(36) 이후로는 중복 계산이 된다. 이렇게 하면 약수의 개수 계산이 훨씬 빨라져 시간 효율성을 개선할 수 있다.6의 약수는 [1, 2, 3, 4, 6, 9, 12, 18, 36] 이 있다. 약수 6 이후로는 다시 작은 수와 곱하면서 확인하는데 이미 앞에서 계산을 했기 때문에 중복 계산이 된다는 것이다.따라서 제곱근을 통해 중복을 제거해서..

SWEA 2024.11.07

[Programmers] L1. 콜라 문제 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이아래의 표를 보면 몫과 나머지를 이용해 값을 구할 수 있다. 빈 병 a 개 반납b 병 계산콜라 b 병 받기보유 중인 빈 병 a 개 ① 20 / 2 = 1010 x 1 = 10answer = 10n = 10 + (20 % 2) = 10 ② 10 / 2 = 55 x 1 = 5answer = (10 + 5) = 15n = 5 + (10 % 2) = 5 ③ 5 / 2 = 22 x 1 = 2answer = (15 + 2) = 17n = 2 + (5 % 2) = 3 ④ 3 / 2 = 11 x 1 = 1answer = (17 + 1) = 18n =..

[TIL] 2024년 11월 06일

파이썬리스트에 다차원 요소가 들어있을 때 sort list.sort()나 sorted()를 사용할 때는 기본적으로 각 튜플의 첫 번째 요소부터 차례대로 비교하여 정렬한다. 즉, 다차원 요소가 들어 있는 리스트에서 정렬 기준이 명시되지 않으면 튜플의 첫 번째 요소부터 비교하고, 첫 번째 요소가 동일하면 두 번째 요소, 두 번째 요소도 같으면 세 번째 요소… 이런 방식으로 순차적으로 비교하여 정렬한다.   ★ 예시 : (year, month, day, name) 형태의 리스트 # 학생 리스트가 (year, month, day, name) 형식으로 저장되어 있을 때student_list = [ (2000, 5, 21, "Alice"), (1999, 12, 15, "Bob"), (2000, 5,..

TIL 2024.11.06

[자바 중급] 11. Generic 1

Generic자바에서 제네릭(generics)은 클래스, 메소드, 인터페이스를 선언할 때 데이터 타입을 파라미터로 받을 수 있게 해주는 기능이다. 제네릭을 사용하면 코드의 재사용성과 안정성을 높일 수 있다. 주요 특징은 다음과 같다.컴파일 타임 타입 체크제네릭은 컴파일 시점에 타입을 체크하여, 잘못된 타입이 사용되는 것을 방지한다. 예를 들어 List으로 선언하면 이 리스트에는 오직 String 타입만 담을 수 있다.타입 안정성제네릭을 사용하면 캐스팅(casting)을 피할 수 있어 타입 안정성을 높일 수 있다. 예를 들어, 제네릭을 사용하지 않는 List에서 객체를 꺼낼 때는 (String)처럼 캐스팅해야 하지만, 제네릭을 사용하면 그런 과정이 필요 없다.코드 재사용성여러 타입에서 사용할 수 있는 코드..

[BOJ] 5635. 생일 (Python/구현/Silver 5)

[문제 링크] 👉https://www.acmicpc.net/problem/5635 Solutionsol.1 (date 함수 사용)from datetime import daten = int(input()) # 학생의 수students = [input().split() for _ in range(n)]# 초기화된 생일 변수youngest_date, oldest_date = date(1990, 1, 1), date(2010, 12, 31)youngest_name, oldest_name = "", ""# 학생들의 생일 비교for name, day, month, year in students: birth_date = date(int(year), int(month), int(day)) if birth..

[Programmers] L1. 모의고사 (완전탐색/Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이각 수포자의 패턴 정의각 수포자는 문제를 찍는 일정한 패턴을 가지고 있다.첫 번째 수포자는 [1, 2, 3, 4, 5], 두 번째는 [2, 1, 2, 3, 2, 4, 2, 5], 세 번째는 [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]라는 패턴을 반복하며 답을 찍는다.정답과 비교하여 맞힌 개수 계산주어진 answers 리스트와 각 수포자의 패턴을 반복 비교하여 맞힌 개수를 센다.j 변수를 사용해 각 수포자 패턴의 인덱스를 맞춰 가며 비교하고, j가 패턴 길이에 도달하면 다시 0으로 초기화하여 패턴을 반복한다.모든 수포자의 점수..

[Programmers] L1. 문자열 내 마음대로 정렬하기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이💡 sorted() 와 lambda 사용 sorted와 lambda 를 조합해서 사용한다. strings 리스트의 요소들을 다음 기준에 따라 정렬기본 정렬 기준 : 각 문자열의 n번째 글자를 기준으로 오름차순 정렬보조 정렬 기준 : 만약 n번째 글자가 같은 문자열이 있다면, 전체 문자열을 기준으로 사전순 정렬 lambdan 번째 인덱스 기준으로 정렬하고, 동일한 글자인 경우 문자열 기준으로 추가 정렬key=lambda x: (x[n], x) sorted()strings 오름차순 정렬sorted(strings)  Solutionsol...

[Programmers] L1. 가장 가까운 같은 글자 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이1️⃣ 문자열 길이 만큼 반복문을 돌린다. 2️⃣ 문자열 중 현재 위치 전까지 슬라이싱 한 후, 현재 문자가 슬라이싱 한 리스트에 있는지 확인한다. if s[i] not in s[:i]: ...else: ...문자 not in 리스트 : 문자가 리스트에 없으면 True 를 반환문자 in 리스트 : 문자가 리스트에 있으면 True 를 반환 3️⃣ 없으면 -1을 결과 리스트에 추가하고, 있으면 문자열에서 현재 위치 이전부터 맨 앞까지 거꾸로 확인한다. for j in s[i-1::-1]:리스트[start:end:step] : step 에 ..