Stay Hungry Stay Foolish

분류 전체보기 430

[SWEA] 6485. 삼성시의 버스 노선 (Python/D3)

[문제 링크] 👇  SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이 방법버스 정류장 배열 초기화bus 배열을 초기화하여 각 정류장의 버스 노선 수를 0으로 설정한다.정류장의 번호는 문제에서 최대 5,000까지 가능하므로 배열의 크기를 5,000으로 지정한다.노선 정보 입력 및 정류장 누적각 버스 노선의 시작 정류장 A와 끝 정류장 B가 주어지면, 해당 범위 내 모든 정류장의 값을 1씩 증가시켜, 각 정류장이 포함된 버스 노선의 개수를 누적한다.특정 정류장 개수 계산이후에 특정 정류장에 대해 지나가는 버스의 수를 확인하기 위해 P개의 정류장 번호를 입력받고, bus 배열에서 해당 인덱스 값을 result 리스트..

SWEA 2024.11.13

[SWEA] 5789. 현주의 상자 바꾸기 (Python/D3)

[문제 링크] 👇 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com풀이 방법.상자 리스트 초기화각 테스트 케이스마다 크기가 N인 리스트 box를 0으로 초기화하여 만든다. 이 리스트는 각 구간의 값을 저장하는 역할을 한다.구간에 값 할당Q개의 구간 입력을 반복해서 처리한다.각 구간에 대해 L부터 R까지 반복문을 돌며, 현재 구간 번호 i 로 리스트의 해당 구간 요소들을 업데이트한다.결과 출력리스트 box의 값들을 문자열로 변환해 공백으로 구분하여 출력한다.SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): N, Q = map(int, ..

SWEA 2024.11.13

[TIL] 2024년 11월 11일

파이썬단어 중복 체크 시 시간복잡도 list vs set 자료구조리스트에서의 in 연산은 O(n)의 시간이 소요되고, set 자료구조는 O(1)의 시간이 소요된다. 따라서 중복 체크 시 set를 사용하여 코드를 작성하는 것이 더 효율적이다.  📜 작성한 게시글[Programmers 코딩테스트 L2. 짝지어 제거하기] 👉 https://dev-cloud.tistory.com/398 [Programmers 코딩테스트 L2. 카펫] 👉 https://dev-cloud.tistory.com/399 [Programmers 코딩테스트 L1. 푸드 파이트 대회] 👉 https://dev-cloud.tistory.com/400 [Programmers 코딩테스트 L2. 점프와 순간 이동] 👉 https://de..

TIL 2024.11.12

[Programmers] L1. [1차] 비밀지도 (Python)

[문제 링크] 👇  프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법입력받은 배열을 한 줄씩 순회하며, arr1과 arr2에서 동일한 위치에 있는 숫자 i와 j를 함께 다룬다.i와 j를 각각 n자리 이진수 문자열로 변환한다. 여기서 i를 이진수로 바꾼 후, n자리 형식으로 맞추기 위해 0을 앞에 추가해 준다.변환한 두 이진수 문자열을 한 자리씩 비교같은 위치에 있는 두 비트 값이 둘 중 하나라도 1이면 해당 위치를 #으로, 둘 다 0이면 공백으로 바꾸어 bin_str에 추가bin_str이 완성되면 한 줄의 지도가 생성된 것이므로, 이를 answer에 추가모든 줄에 대해 반복한 후 answer를 ..

[Programmers] L2. 영어 끝말잇기 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 탈락 조건 : 같은 단어인 경우, 끝말잇기가 성립이 안 되는 경우 게임 진행 정보 초기화몇 번째 게임(라운드)인지 저장할 변수와, 현재 차례를 저장할 변수를 생성한다.두 번째 단어부터 순회하므로 모두 1로 설정한다.현재 단어의 첫 글자와 비교하기 위해, 직전 단어의 마지막 글자를 저장하기 위한 변수를 생성한다.첫 번째 단어의 마지막 단어를 저장한다.중복 여부를 확인하기 위해 사용된 단어를 저장할 리스트를 생성한다. (set 를 사용하는 것이 효율적이다.) 맨 처음 인덱스에 첫 번째 단어를 저장한다.단어 리스트 순회차례가 사람..

[Programmers] L2. 점프와 순간 이동 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 짝수와 홀수를 구분하고, 순간이동은 2배만큼 하므로 2로 나누기 N이 6이라고 할 때, 다음 그림과 같다. 파란색 숫자는 순간이동을 한 위치이다.순간이동을 할 때 2의 배수만큼 움직이므로 2로 나누는데, 이때 홀수와 짝수를 구분한다.홀수이면 -1 을 한 후에 2로 나눠야 하는데, 이 과정이 jump를 한 것과 같다.따라서 홀수일 때만 -1 을 해주고 jump 횟수를 카운트 해준다.Solutiondef solution(n): ans = 0 while n > 0: if n % 2 != 0: ..

[Programmers] L1. 푸드 파이트 대회 (Python)

[문제 링크] 👇 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이 방법💡 2로 나누기 주어진 음식의 양을 두 사람에게 나누어 주어야 하므로 2로 나눈다.  2로 나눈 몫만큼 음식을 순서대로 배치하면 된다. 입력 예시[1, 7, 1, 2]0번째 인덱스는 물의 양이고, 물은 항상 1이므로 신경 쓰지 않는다.1번째 인덱스부터 음식의 양이 주어진다.1번째 인덱스를 2로 나눈 몫은 3이다. 이 말은, 7개의 음식을 3개씩 나누어서 두 사람에게 줄 수 있다는 말이다. 따라서 1을 3만큼 저장한다.2번째 인덱스는 2보다 작으므로 두 사람에게 나누어 줄 수 없다. 따라서 무시한다.3번째 인덱스를 2로 나눈 몫은..

[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