Stay Hungry Stay Foolish

전체 글 423

[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 에 ..

[파이썬] 순열(Permutations) 과 조합(Combinations)

permutations (순열) 파이썬의 permutations 함수는 순열을 생성하여, 주어진 순서로 뽑을 수 있는 모든 경우의 수를 구한다. 순서가 중요한 경우에 사용된다. itertools 모듈에 포함되어 있어 사용 전에 이 모듈을 임포트해야 한다.  기본 구문from itertools import permutationspermutations(iterable, r)iterable : 순열을 생성할 대상 (리스트, 문자열 등).r : 순열의 길이 (뽑을 개수). r을 생략하면 기본값은 len(iterable)로 설정된다. 사용 방법 1️⃣ 기본 사용from itertools import permutationsitems = ['a', 'b', 'c']perm = permutations(items, 2)..

알고리즘 2024.11.06

[Programmers] L1. 삼총사 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이💡combinations 함수 사용  combinations는 순서에 상관없이 주어진 길이만큼 원소를 뽑는 모든 조합을 생성해주는 함수이다. itertools 모듈에 포함되어 있어, 이 모듈을 먼저 임포트해야 한다.combinations는 순서를 고려하지 않고 특정 길이만큼 요소를 뽑는 모든 조합을 생성한다.결과는 튜플 형태로 반환되며, list()로 변환하면 전체 조합을 리스트로 볼 수 있다.조합의 길이를 지정해야 하며, itertools 모듈에서 가져와야 사용 가능하다. 기본 구문from itertools import combin..

[SWEA] 4676. 늘어지는 소리 만들기 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이💡 주의할 점 : 하이픈을 넣은 후에 기존 문자열 위치 변동 하이픈을 삽입하는 방법str.insert(i, x)str 문자열의 i 위치 앞에 x 를 삽입한다. SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): word = list(input().strip()) # 문자열 h = int(input()) # 하이픈 개수 hyphen = sorted(list(map(int, input().split()))) # 하이픈 위치 정렬 for i in r..

SWEA 2024.11.04

[SWEA] 12004. 구구단 1 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이N의 약수 중에서 1 이상 9 이하인 수가 있는지 확인한다. 따라서 반복문을 1부터 9까지만 돌게 한다.1부터 N을 나누는데, 나머지가 0이면 약수이다. 이 값을 a 라고 생각하자.그리고 N을 나눈 몫의 값이 b 라고 생각하면, b 의 값도 9 이하가 돼야 한다.따라서 and 연산자로 나머지는 0이면서 몫이 9 이하인 걸 찾고 결과에 "Yes" 를 저장한다.그리고 불필요한 추가 연산을 줄이기 위해 반복문을 종료한다.SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): ..

SWEA 2024.11.04

[BOJ] 2563. 색종이 (Python/구현/Silver 5)

[문제 링크] 👉https://www.acmicpc.net/problem/2563 풀이💡 100x100 도화지의 각 좌표를 하나의 큰 이차원 배열로 생각하여 해당 위치를 차지하고 있는 색종이 위치를 체크 각 색종이의 좌표에 해당하는 영역을 배열에 표시한 다음, 전체 배열에서 검은색 영역의 넓이를 구하면 된다.  100x100 배열 생성paper 배열을 만들어 도화지의 각 위치에 색종이가 붙었는지 확인할 수 있도록 한다.색종이 붙이기각 색종이의 좌표 (x, y)에서 시작하여, 10x10 크기의 정사각형 영역에 해당하는 paper 배열의 값들을 1로 설정검은 영역 계산모든 행을 순회하며 1로 설정된 영역을 합산하여 검은 영역의 넓이를 구한다. SolutionN = int(input()) # 색종이 수p..

[SWEA] 4299. 태혁이의 사랑은 타이밍 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이💡약속 시간과 입력받은 시간을 분 단위로 변환하기 소개팅 약속 시간인 11일 11시 11분을 분 단위로 변환하고, 입력받은 시간도 분 단위로 변환한 후 비교한다.입력받은 시간이 약속 시간보다 작으면 약속 시간 이전에 도착한 것이므로 -1 을 출력한다.약속 시간보다 크면 입력받은 시간에서 약속 시간을 뺀다. SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): D, H, M = map(int, input().split()) # 기준 시간: 2011년 11월..

SWEA 2024.11.04

[SWEA] 15230. 알파벳 공부 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이알파벳 26자를 따로 저장한다.입력받은 문자와 알파벳 26자의 인덱스가 일치하면 순서에 맞게 적혀 있다는 것이다.일치하지 않으면 반복문을 중단시킨다. SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): input_alpha = input().strip() alpha = "abcdefghijklmnopqrstuvwxyz" # 알파벳 result = 0 while result  개선할 점위 코드도 간결하지만, 이미 result를 인덱스로 쓰고 있어서 더..

SWEA 2024.11.04