본문 바로가기

알고리즘, 문제 풀이기록

(51)
K-MOOC 자료구조 1-1 퀴즈2 이 퀴즈를 풀기에 피지컬이 모자란다. (20:43) // (23:01) 객관식이어서 앞의 두 출력값만 구하고 퀴즈를 맞추었다. 프로그램의 로직을 수기로 따라갈 때에는 구조적으로 해야함을 배웠다.
어자알처 - (04) 피보나치 수열 def solution(x): if x == 0: return 0 elif x == 1: return 1 return solution(x-2) + solution(x-1) 점프투 파이썬 교재에 같은 문제가 있어서 그것의 답안을 첨부한다. 이 코드를 통해 배운 것은 우선 어떤 함수의 반환값에서 다시 그 함수를 호출하는 것이 재귀 함수의 한 조건이 아닌가 하는 것이다. 그리고 본 강의에서 종결조건이 중요하다고 했는데, if문이 그 종결조건 역할을 하는 듯 하다. 직접 x=6일 때 값을 수기로 구해보았는데, Binary tree(이진트리)가 그려졌다. 이 알고리즘을 해결하기 위해 선형적인 사고를 했었는데, 트리(tree)적 사고를 해야 했는 게 아니었나 생각이 든다.
(파이썬) 리스트에서 원소 찾아내기 출처 def solution(L, x): answer = [] if x in L: answer = [i for i,e in enumerate(L) if e == x] else: answer = [-1] return answer 배운 것 1. 리스트 안에 같은 원소가 있을 때 각각의 인덱스값을 따로 도출하려면 enum()을 활용할 수 있음을 배웠다. (출처: SO) 2. enum()에 대해 배웠다. (출처: 공식문서)
ATM 풀이기록 n = int(input()) ls = list(map(int, input().split())) ls.sort() sum = 0 for i in ls: for j in range(ls.index(i)): sum += ls[j] print(sum) n = int(input()) s = list(map(int, input().split())) num = 0 s.sort() for i in range(n): for j in range(i + 1): num += s[j] print(num) (출처) n값을 입력받는 이유는 그것을 활용해야 하기 때문일 것이다. for문에서 in 다음에 range()를 활용해야 index값을 활용할 수 있으니 이 점 유의하자.
거스름돈 n = int(input()) cnt = 0 while n != 0: if n % 500 > 0 : cnt += n % 500 n = n % 500 elif n % 100 > 0 : cnt += n % 100 n = n % 100 elif n % 50 > 0 : cnt += n % 50 n = n % 50 elif n % 10 > 0 : cnt += n % 10 n = n % 10 print(cnt) n = 1260 count = 0 # 큰 단위의 화폐부터 차례대로 확인하기 coin_types = [500, 100, 50, 10] for coin in coin_types: count += n // coin # 해당 화폐로 거슬러 줄 수 있는 동전의 개수 세기 n %= coin print(count) 리스..
문자열 뒤집기 풀이 (하다만 내 풀이) s = input() zero_chunk_count = 0 one_chunk_count = 0 l = [] for i in s: l.append(i) for i in range(len(l)): if l[i] == '0' and l[i+1] != '0': zero_chunk_count += 1 elif l[i] == '1' and l[i+1] != '0': one_chunk_count += 1 if zero_chunk_count > one_chunk_count: print(one_chunk_count) elif zero_chunk_count < one_chunk_count: print(zero_chunk_count) (정답) data = input() count0 = 0 # 전부 0으로..
루빅스큐브 2단계 구현기록 깃허브 코드 본 문제를 구현한 과정은 다음과 같다. 구현 시도 -> Jane 코드 따라치면서 배워야 할 것을 배움 -> 다시 구현 시도 -> 자바의 정석 객체지향프로그래밍Ⅰ 유튜브 강의 완주 -> 다시 구현 시도 -> Jane 코드 중간중간에 참고함 -> 구현. (이때 구현이라 함은 문제의 최소 요구사항을 다 만족했다고 스스로 판단했다는 것을 의미한다.) 이번 과정의 핵심은 '객체지향프로그래밍'에 있다고 생각한다. 이번 구현을 통해 객체지향프로그래밍을 연습했다. 메서드끼리, 클래스끼리 상호작용하는게 재밌기도 했다. 구현과정에서 겪은 몇몇 난관의 해결법을 순서 상관없이 소개하겠다. 1. 객체가 생성된 메서드가 아닌 다른 메서드에서 그 객체를 활용해야 할 때, 그 다른 메서드의 매개변수에 그 객체가 생성된 ..
루빅스 큐브 1단계 구현 기록 import java.util.ArrayDeque; import java.util.Deque; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] input = new String[3]; for (int i = 0; i < input.length; i++) { input[i] = sc.next(); } Deque chars = new ArrayDeque(); for (int i = 0; i < input[0].length(); i++) { chars.add(input[0].charAt(i)); } if (input[2]...