masterpiece-programming의 등록된 링크

키자드에 등록된 총 269개의 포스트를 확인하실 수 있습니다.

Tistory

[Java] Resource를 다룰 때 예외처리(finally, AutoCloseable)

[Java] Resource를 다룰 때 예외처리(finally, AutoCloseable) 1. finally를 쓰는 이유 자바가 프로그램 외부에 있는 데이터에 액세스 할 때 생기는 문제들이 있다. 외부에 있는 데이터는 DB, Network, File 등이 있다. 이것들을 Resource라고 하는데 리소스는 자바 내부의 변수나 객체들과 비교해보았을 때, 다양한 예외적 상황이 생길 수 있다. 리소스를 자바로 사용할 때, 데이터를 붙잡고 있는 행위를 하고 있다가 놔주는 것이 close()이다. FileWriter f; // => f가 전역 변수여야 finally에서 f 사용이 가능해진다. try{ f = new FileWriter("data.txt"); f.write("Hello"); //f.close();..

Tistory

[Java] 상속 inheritance 을 활용한 정보관리 시스템 만들기

[Java] 상속 inheritance 을 활용한 정보관리 시스템 만들기 상속은 객체 지향에서 중요한 개념이다. 매번 클래스에 같은 내용을 넣지 않고, 기존의 클래스에 추가하고 싶은 내용이 있는데, 각기 다른 특성을 가질 경우 예를 들어 S클래스라는 자동차의 외관 설계를 하는 클래스가 있다고 치자. 외관은 공통인데 엔진이 다를 수 있지 않은가. 디젤 엔진을 가진 S클래스와 가솔린 엔진을 가진 S클래스를 각각 만들고 싶다면, 디젤 S클래스 extends S클래스 가솔린 S클래스 extends S클래스 해서 엔진 부분만 각각 바꾸어 주면 된다. 이렇게 해서 얻는 이득은, 각각의 디젤 S클래스, 가솔린 S클래스의 내부 코드에서 S클래스의 외관 설계를 하는 코드가 들어가지 않아도 된다는 코드 작성의 효율성과 외..

Tistory

[GIT] 프로젝트의 시작 GIT

[GIT] 프로젝트의 시작 GIT commit의 시작 git. 1일 1커밋의 생활도 여기에서부터 시작된다. git은 프로그램의 버전의 수정의 전과정을 기록하고 있고, 이전 버전에서 어떤 것이 달라졌는지를 알려주는 도구이다. 당연히 어떤 부분이 달라졌는지를 알 수 있다면 '백업'의 기능도 한다고 할 수 있고, '백업'을 할 수 있으니 공동작업이 가능해진다. 이제까지는 기본 언어, 알고리즘 등의 기초 공부만을 했다면, 실무에 필요한 기술들을 하나씩 알아나가 볼 것이다. (그렇지만 아직 기초도 탄탄하지 못하다...) 이번 포스팅은 깃은 어디에 써먹는가, 어떻게 써먹는가에 대한 기초를 간단히 기록해놓는 목적으로 한다. 1. 깃은 어디에 써먹을까 위에서 말했듯 버전 관리, 백업, 협업 이 세 가지에 활용하려고 깃..

Tistory

[Java] Overloading, Overriding

[Java] Overloading, Overriding 오버로딩과 오버라이딩 말은 비슷하지만 다른 것이다. 오버로딩은 매개변수를 다양하게 받아오기 위해서 생성자든 메소드든 '과적'을 하는 것이고, 오버라이딩은 상속과 연관된 개념으로 부모 클래스의 메소드를 덮어쓰고 새로운 메소드로 활용하는 것이다. 1. Overloading public class Over{ public Over(int a){ ... } public Over(int a, int b){ ... } public Over(int a, int b, String c){ ... } } Over o1 = new Over(1); Over o2 = new Over(1, 2); Over o3 = new Over(1, 2, "야호"); 위와 같이 Over 클..

Tistory

[Java] this와 super

[Java] this와 super this와 super. 많이 보긴하는데, 헷갈릴 때가 있다. 또한 this와 this(), super와 super()의 차이. 더 상세하게 알아보고 기억하기 위해 기록한다. 아래의 코드는 정보관리 시스템을 할 때 사용한 코드이다. 2022.06.13 - [프로그래밍 언어/Java] - [Java] 상속 inheritance 을 활용한 정보관리 시스템 만들기 public Student(String name, int age, int height, int weight, String studentId, int grade, double gPA) { //상속받은 클래스의 매개변수를 가진 super 생성됨. super(name, age, height, weight); this.stu..

Tistory

[Java] Java 자바 final

[Java] Java 자바 final 자바에서 final 키워드는 여러 컨텍스트에서 단 한 번만 할당될 수 있는 entity를 정의할 때 사용된다. 메모리에 한 번 할당되면 변경할 수 없다. 즉, int 타입의 경우 상수처럼 활용되고, 메소드에서 final을 쓸 경우, 그 메소드가 들어있는 클래스를 다른 클래스에서 상속했다면, 다른 클래스에서 그 메소드를 오버라이딩해서 쓸 수 없다. final을 쓰면 뭐든 간에 다른 곳에서는 '변경'할 수 없다. final은 아래와 같이 쓸 수 있다. public class Final { public static void main(String[] args) { // number가 상수가 된다. final int number = 10; System.out.println(n..

Tistory

[Java] 다형성(Polymorphism) 알아보기

[Java] 다형성(polymorphism) 알아보기 칼은 참 다양한 종류가 있다. 요리할 때만 해도, 과일칼, 채소자르는 칼, 고기 다지는 칼, 빵칼 등등등.. 요리 용도가 아니라 도축, 수술 등등 많은 곳에서 쓰는 것이 칼이다. '칼'이라는 것이 만약에 클래스라면, 또는 인터페이스라고 이해를 해보자. 칼은 '스테인리스'로 되어 있고, '손잡이'가 있으며, '한 면이 날카롭거나 두 면이 날카로워야' 한다. 이렇듯 다형성은 :같은 타입이지만 실행 결과가 다양한 '객체'를 이용할 수 있는 성질 을 의미한다. 과일칼과 수술용 메스도 어찌보면 같은 타입인데, 과일 칼은 과일 깎을 때 사용하고, 메스는 개복에 사용한다. 실행 결과 자체가 달라지는 것이다. 자바에서는 다형성을 위해 부모 클래스 타입의 참조 변수로..

Tistory

[Java] 배열, 다차원 배열

[Java] 배열, 다차원 배열 파이썬의 리스트, 자바의 배열 무엇이 다른지는 자료구조 학습을 통해 알게 되었다. 배열은 메모리를 할당받아 길이가 정해져있다는 것, 리스트는 각 데이터 마다 노드와 링크로 이어져 길이 제한이 없다는 것. 배열은 길이를 한 번 정하면 바꾸기 어렵다. 새로운 배열을 만들어 그 속에 기존의 데이터를 넣고, 새로 데이터를 추가하는 방법을 써야 한다. 이러한 배열을 다시 자바 식으로 리마인드 해본다. 1. 배열 import java.util.Scanner; public class ArrayMaxValueFind { public static int max(int a, int b) { return (a > b) ? a : b; } public static void main(String..

Tistory

[Java] 원 찍기

[Java] 원 찍기 반복문을 하면서 알게된 원찍기 별찍기는 많이 해봤지만, 원찍기는 해보지 않아서 해보았다. x^2 + y^2 = r^2을 아래의 코드에 구현했다. final static int N = 15; public static void main(String[] args) { for (int i = -N; i

Tistory

[Java] 클래스 변수와 인스턴스 변수의 차이

[Java] 클래스 변수와 인스턴스 변수의 차이 객체 지향에서 가장 중요한 클래스와 상속. 클래스는 정말 기본 중에 기본이다. 상속에서 클래스를 비유해보았는데 참고하면 좋을 것이다. 2022.06.13 - [프로그래밍 언어/Java] - [Java] 상속 inheritance 을 활용한 정보관리 시스템 만들기 [Java] 상속 inheritance 을 활용한 정보관리 시스템 만들기 [Java] 상속 inheritance 을 활용한 정보관리 시스템 만들기 상속은 객체 지향에서 중요한 개념이다. 매번 클래스에 같은 내용을 넣지 않고, 기존의 클래스에 추가하고 싶은 내용이 있는데, 각기 다른 masterpiece-programming.tistory.com 클래스를 여러 개 쓰면서 전국의 아빠들이 만드는 다 때..

Tistory

[Java] 추상, 인터페이스

[Java] 추상(abstract), 인터페이스(interface) 추상(abstract) 그리고 인터페이스(interface)는 "~을 하겠다"라는 계획서와 같다. '하겠다'라고 하면 너무 추상적이지 않은 계획서이지 않나? 그렇다. 그 부분 때문에 추상 또는 인터페이스를 쓰는 것이다. ~~을 해야 한다를 기억해 놓을 수 있기 때문에, 그 때 그 때 ~~을 상황에 맞게 해결해 나가면 되는 것처럼, 완벽하게 구현해놓지는 않았지만, 추상 클래스 또는 인터페이스를 상속하여 그 부분을 상세하게 클래스 안에서 구현하고 싶을 때, 추상 또는 인터페이스를 사용하는 것이다. 1. 추상(Abstract)으로 동물 클래스 만들기 각각의 동물의 울음소리를 각각의 클래스마다 다르게 설정해보는 것이다. '울음' 이라는 것은 동..

Tistory

[Java] 증감 연산자, 거듭제곱, 삼항 연산자, 파일 입출력

[Java] 증감 연산자, 거듭제곱, 삼항 연산자, 파일 입출력 1. 증감 연산자 public class Main { public static void main(String[] args) { // TODO Auto-generated method stub int a = 10; System.out.println("현재 a는 " + a + "입니다." ); a++; System.out.println("현재 a는 " + a + "입니다." ); // 출력 전에 ++ 연산 System.out.println("현재 a는 " + ++a + "입니다." ); // 출력 후에 ++ 연산 System.out.println("현재 a는 " + a++ + "입니다." ); System.out.println("현재 a는 " +..

Tistory

[Java] 사용자 정의 함수

[Java] 사용자 정의 함수 객체 지향에서 개발자가 정의하는 메소드는 아주 기본 중에 기본이다. 메소드를 활용해서 데이터를 통제할 수 있기 때문이다. 그렇게 해서 사용자가 어떤 데이터를 집어 넣으면 메소드를 통해서 정보가 저장이 되고 기존에 있는 데이터를 불러와서 매치 시켜보고, 맞으면 돈을 인출해준다던지 (볼드체가 메소드를 통해 이루어지는 행위들이다.) 아무튼 가장 기본중에 기본이다. 그럼 사용자 정의 함수가 있으면, 사용자가 정의하지 않는 함수도 있다? 그렇다. 기본으로 내장되어 있는 함수가 그러하다. 앞서 봤던 substring();이라던지, 제일 처음 자바를 마주할 때 쓰는 System.out.println(); 이것들이 사용자가 정의하지 않는 기본 함수 즉, 내장함수이다. 세 가지의 활동을 통..

Tistory

[Java] 반복 함수, 재귀 함수

[Java] 반복 함수, 재귀 함수 반복 또는 재귀 함수는 DP, DFS, BFS 등의 알고리즘에서 흔히 쓰이는 함수이다. 수학적 감각이 약간 필요한 친구라고 할 수 있겠다. 자기 자신을 또 호출하는 재귀함수는 처음에 볼 때는 이해하기 어려운 측면이 있는데, 누가 호출되고, 언제 그 계산이 되는지를 생각해보면 쉽게 이해할 수 있다. 이 두 가지 함수를 이해하기 위해서는 '팩토리얼'과 '피보나치'를 구현해보면 된다. 1-(1). 팩토리얼 반복문 사용 // 반복문 활용 public static int factorial(int number) { int sum = 1; for(int i = 2; i < number; i++) { sum *= i; } return sum; 팩토리얼은 n!으로 나타내며, 1부터 n..

Tistory

멋쟁이사자처럼 백엔드 스쿨 1기 합격 후기

포스팅을 한동안 하지 못했다. 여기 저기 교육 프로그램에 지원하고 무엇을 해보고 싶은지를 생각해보느라 기록을 미뤄두고 덮어뒀던 것 같다. 5월 중순 이후부터 SSAFY 지원을 하고 나서 적성 준비, 에세이 준비 그리고 싸피 오픈채팅방에서 알게된 코드라이언 백엔드 스쿨 지원, 42서울 지원 등등을 해보았다. 일단 SSAFY는 할 얘기가 많지만 결과가 나오지 않아 나중에 포스팅하기로 하고,,,, 코드라이언 백엔드 스쿨 1기 지원후기 부터 이야기 하고자 한다. SSAFY를 준비하던 중 알게된 므째이 사자스쿨 백엔드 1기. 프론트 엔드는 많이 모집했던 것을 알고는 있긴 했지만, 백엔드 1기를 모집한다기에 관심이 갔다. 아직 내가 하고 싶은 일이 백엔드인지는 모르겠지만, 백엔드와 관련된 것이 나의 흥미와 비슷하다..

Tistory

SSAFY 삼성 청년 SW 아카데미 8기 지원후기

작년 11월 한참 전직을 마음먹고 몇 가지 찾아보던 중 프로그래밍을 생각하고 있던 중에 친구가 소개해줬던 대한민국의 소프트웨어의 미래를 이끄는 SSAFY 7기에 지원했었지만, 적성시험이 익숙하지 않았고 그렇다고 열심히 공부할 수 있는 상황도 아니었다. 더군다나 CT 문제는 인생 초면이었기 때문에 결국 1차 광탈하고 말았었다. 지금은 깔짝 이긴 하지만 알고리즘을 완벽하게는 아니지만 이해할 수 있는 정도는 되었고, 적성시험도 시간을 두면서 천천히 실력을 올려갈 수 있는 상황이 되었다. 무튼 싸피는 이번이 마지막 지원이 되지 않을까 싶다. (교육기관 말고 어디든 가야 되니까...) 싸피의 지원자격과 지원절차 홈페이지에 들어가면 볼 수 있긴 한데, 간략히 이야기하면 다음과 같다. 지원자격 : 만 29세 이하이며..

Tistory

[Java] 자바 데이터 타입, 사칙연산, substring

[Java] 자바 데이터 타입 어쩌다 보니 다시 자바를 공부하게 되었다. 자바를 위주로 알고리즘 공부도 진행하게 되지 않을까 싶다. Hello World는 한참 전에 찍어봤기 때문에 데이터 타입부터 리마인딩 한다는 생각으로 강의를 듣고 왔다. 동빈나님의 강의인데 아주 간결하고, 기존에 지식이 있는 사람이 듣기에 아주 좋다고 생각한다. 객체 지향 프로그래밍까지의 기억을 되살려줄 수 있는 강의라고 보면 된다. https://youtu.be/wjLwmWyItWI https://youtu.be/wjLwmWyItWI 동빈나님은 코딩테스트 책을 알아보다가 알게 되었고, 강의를 하나씩 들어보니 아주 간결하고 알아듣기 좋았다. 그래서 이번 자바 리마인딩도 동빈나님의 자바 강의가 있어 들어보았다. 강의 포스팅은 강의에서..

Tistory

[자료구조] Balanced BST(균형이진탐색트리)의 정의와 종류

[자료구조] Balanced BST(균형이진탐색트리)의 정의와 종류 살펴볼 주요 개념: Balanced BST의 정의 Balanced BST의 종류 1. Balanced BST의 정의 Balanced BST(균형이진탐색트리, 이하 BBST)는 BST(이진탐색트리)가 위의 사진처럼 데이터 추가로 인해 길이가 과도하게 길어진 편향적인 이진 탐색트리를 방지하기 위해 만들어졌다. 높이는 탐색, 삽입과 삭제 연산에 영향을 미치게 된다. 노드의 탐색 시간이 많이 걸릴 수록 삽입과 삭제연산도 이에 영향을 받아 수행시간이 오래 걸릴 수 있다. 그렇기 때문에 높이는 최소한으로 하면서 트리에 데이터를 삽입, 삭제하는 것이 필요하다. 위의 사진의 경우를 보면 왼쪽의 BST에서는 15에서 8까지 가는 것에 에지를 4번 거쳐야..

Tistory

[자료구조] Union-find 자료구조 python

[자료구조] Union-find 자료구조 python 살펴볼 주요 개념: Union find란? Union find 구현(python) 1. Union find란? 서로 중복되지 않는 부분 집합들로 나눠진 원소들에 대한 정보를 저장하고 조작하는 자료 구조. 다수의 노드들 중에 연결된 노드를 찾거나 노드들을 합칠 때 사용하는 알고리즘이다. union find는 서로소 집합(disjoint set)을 찾아내는 것에 활용된다. union find와 비슷한 것은 python에서는 set()이 있다. set은 membership 연산(어떤 원소가 집합에 속하는 지를 T/F로 알려주는)과 합집합(union), 교집합(intersection), 여집합(difference) 등의 연산을 제공한다. 하지만 파이썬의 se..

Tistory

[자료구조] Binary Search Tree(BST, 이진탐색트리) 정의와 python 구현

[자료구조] Binary Search Tree(BST, 이진 탐색 트리) 정의와 python 구현 살펴볼 주요 개념: 더보기 - Binary Search Tree의 정의 - Binary Search Tree 구현 방법 1. Binary Search Tree의 정의 이진탐색 트리는 탐색에 효율적인 트리이다. 이진트리의 규칙은 다음과 같다. 각 노드의 왼쪽 subtree의 값은 노드의 key값 보다 작거나 같아야 하고, 오른쪽 subtree의 값은 노드의 key값 보다 커야 한다. 12의 자리에 1이 올 수는 없다. 왜냐하면, 1이 부모 노드인 13보다 작은 수 이더라도, 10의 오른쪽 subtree이기 때문에 10보다 큰 수가 와야 하기 때문이다. 즉, 12 노드 자리에는 10~13까지만 key값으로 사용..

Tistory

python 로또 번호 추출기 2탄

python으로 로또 추출기를 만든지 한 달 넘게 지났다. 자바로 했던 것을 파이썬으로 옮겨 놓는 것이 1탄이었다면, 무식했던 방법을 새로운 정렬 알고리즘을 통해 다시 만들어보고자 한다. 기존의 코드의 단점은 1000만 개 이상의 번호를 만들면 과도한 시간이 걸리는 것이었다. 2022.04.18 - [프로그래밍/재미있는 코딩놀이] - python 로또 번호 생성기 그래서 최근에 배운 계수정렬을 활용하면 딕셔너리를 활용하지 않고 충분히 많이 만들어진 로또 번호를 6개 골라낼 수 있을 것 같았다. 왜냐하면 계수 정렬에 필요한 리스트의 크기가 45이면 충분했기 때문이다. 메모리 용량도 그렇게 많이 잡아먹지 않고, 빠르게 연산할 수 있다고 생각했다. 바로 실행에 옮겼다. ** 기존 코드 import random..

Tistory

[백준] 1918 후위 표기식 python 알고리즘 문제

문제 1918. 후위 표기식 1. 나의 코드와 발상 과정 최근 자료구조 공부를 하다가 기본 자료구조인 스택을 배웠는데, 대표적인 활용 예시로 괄호와 계산기에 적용을 연습하였다. 연산자와 피연산자, 이항연산자, 단항연산자, infix 수식, postfix 수식을 알 수 있었는데, infix 수식에서 postfix 수식으로 바꿀 때, 연산자 스택과 피연산자 스택을 따로 두고 섞어 담아 출력하면 postfix 수식이 된다는 것을 알 수 있었다. 그 기억을 살려 아래와 같이 두 개의 스택을 놓고 코딩을 진행했다. n = list(input()) stack = [] outstack = [] operator = {'(' : 0, '+' : 1, '-' : 1, '*' : 2, '/' : 2} for i in n: ..

Tistory

[자료구조] Tree 기본 개념 알아보기

[자료구조] Tree 기본 개념 알아보기 살펴볼 주요 개념: 더보기 - 트리의 개념 - 트리의 표현법(python) 1. 트리의 개념 트리(tree)는 부모 - 자식 간의 관계의 노드로 구성되어 있다. 한 방향 연결리스트와 비슷하다. 한 방향 연결리스트의 경우, 한 부모에 한 자식 밖에 없는 트리구조인 것이다. 트리는 두 개 이상의 자식 노드를 가질 수 있다. 세 개 이상의 자식을 가지는 2, 3, 4 트리와 같은 것도 존재한다. 각각의 노드에는 key값이 들어가 있다. 각각의 용어 설명을 해보자면 다음과 같다. 루트 노드 : 맨 꼭대기에 위치한 조상과 같은 노드 링크 or 에지 : 부모 노드와 자식 노드 사이를 이어주는 선 리프 노드 : 더 이상의 자식 노드가 없는 노드 형제 노드 : level이 같고..

Tistory

[자료구조] Heap 기초 개념 알아보기(python)

[자료구조] Heap 기초 개념 알아보기(python) 살펴볼 주요 개념: 더보기 - 힙이란? - 힙을 충족하는 트리 형태 - 힙 직접 구현 1. 힙이란? 힙 성질(heap property)을 만족하는 이진트리(Binary Tree)이다. * 힙 성질 - 모양성질 : 레벨 별로 모든 노드가 꽉 차있고, 마지막 레벨의 노드만 왼쪽에서부터 차있는 형태 - heap 성질 : 모든 부모노드의 key값이 자식노드의 key값보다 작지 않다. 힙 성질을 만족하는 트리를 리스트화 해서 표현하면 다음과 같다. A = [15, 12, 6, 11, 10, 2, 3, 1, 5] 루트 노드에는 리스트에서 가장 큰 값이다. 힙은 insert와 remove(최대값 삭제), maxHeapify 연산을 지원한다.(max heap) 각..

Tistory

[자료구조] Binary Tree(이진트리) 구현과 traversal(순회) 구현 python

[자료구조] Binary Tree(이진트리) 구현과 traversal(순회) 구현 python 살펴볼 주요 개념: 더보기 - Binary Tree 구현 방법 - Tree traversal의 종류와 구현 방법 1. Binary Tree 구현 방법 리스트, 재귀적 리스트, 노드 클래스 구현의 방법이 있다. 노드 클래스 구현만 살펴본다. class Node: def __init__(self, key): self.key = key self.parent = self.left = self.right = None def __str__(self): return str(self.key) 2. Tree traversal의 종류와 구현 방법 Traversal(순회) : 노드들을 순서에 따라 방문하며 key 값을 출력하는 것..

Tistory

[자료구조] Double Linked List(양 방향 연결리스트) python class 구현하기

[자료구조] Double Linked List(양 방향 연결리스트) python class 구현하기 살펴볼 주요 개념: 더보기 - 양 방향 연결리스트의 특징 - 양 방향 연결리스트 클래스 구현(Node, Double Linked List) 1. 양 방향 연결리스트의 특징 양 방향 연결리스트는 이중 연결 리스트, 원형 연결 리스트로 나누어 진다. 여기서는 원형 연결 리스트만을 살펴볼 것이다. 양 방향 연결리스트는 tail 노드를 알지 못해도 순차적인 탐색 연산이 필요 없다. 삽입될 앞 뒤의 노드만 알고 있다면, 상수 시간 내에 삽입 또는 삭제 연산이 가능하다. 원형 연결리스트의 맨 앞 노드는 '더미 노드'이다. 원형 연결리스트의 순서를 정확하게 매길 수 없는 특징 때문에, head 노드를 정확하게 설정할 ..

Tistory

[자료구조] 배열, 한 방향 연결리스트, 양 방향 연결리스트 시간복잡도

[자료구조] 배열, 한 방향 연결리스트, 양 방향 연결리스트 시간복잡도 배열 (Array) 한 방향 연결리스트 (Singly Linked List) 양 방향 연결리스트 (Double Linked List) search O(1) O(n) O(n) pushFront pushBack O(1) O(1) O(1) popFront popBack O(1) O(1) O(1) insert O(n) O(n) O(1) ※ splice 연산 활용 remove O(n) O(n) O(1) ※ splice 연산 활용 데이터의 접근, 탐색이 중요하다면 배열을 쓰는 것이 좋다. 데이터의 추가, 삭제가 중요하다면 연결리스트를 쓰는 것이 좋다.

Tistory

[자료구조] hash table(해시 테이블) python class 구현하기

[자료구조] hash table(해시 테이블) python class 구현하기 살펴볼 주요 개념: 더보기 - 해시 테이블의 개념, 특징, 용도 - 해시 함수 - 해시 충돌 회피 - 해시 테이블 클래스 구현(python) 1. 해시 테이블의 개념, 용도, 중요 요소 (1) 해시 테이블의 개념 : 해시 테이블이란 키값에 데이터를 저장하는 데이터 구조이다. key를 통해 데이터(value)를 받아올 수 있으므로 삽입, 삭제, 탐색 연산이 획기적으로 빨라진다. 파이썬에서는 딕셔너리 타입이 해시 테이블의 특징을 가지고 있다. : 해시 테이블은 테이블 사이즈 만큼 배열을 생성하여 사용한다. 특정한 함수(해시 함수)를 통해 key를 인덱스로 mapping을 하고, 테이블 내의 공간에 데이터를 저장하는 것이다. : 파..

Tistory

[Algorithm] 5-(3). 정렬 - 계수 정렬

[Algorithm] 5-(3). 정렬 - 계수 정렬 특정한 조건이 부합할 때만 사용가능하다. 매우 빠르게 동작하는 정렬 알고리즘이다. 동일한 값을 가지는 데이터가 여러 개 등장할 때 효과적으로 사용할 수 있다. O(N+K) 시간 복잡도를 가진다. 각각의 데이터가 몇 번 등장했는지 세어서 정렬을 하는 구조이다. 리스트를 하나 더 만들어야 하지만, 조건만 맞는다면 빠른 모습을 보여준다. 때에 따라 극악의 비효율을 제공하기도 한다. 사용 예시 2022.07.03 - [알고리즘/재미있는 코딩놀이] - 로또 번호 추출기 3탄(자바) 로또 번호 추출기 3탄(자바) 로또 번호 추출기 3탄(자바) 인간의 욕심은 끝이 없고 무한한 성능 향상을 꿈꾼다. 자바의 문법들을 다시 상기하고, 메모리 구조에 대한 것들을 하나씩 ..

Tistory

[자료구조] Linked List(연결리스트)의 특징

[자료구조] 살펴볼 주요 개념: 더보기 - Linked List의 정의 - 한 방향 연결리스트 vs 양 방향 연결리스트 1. Linked List(연결리스트)의 정의 연결 리스트, 링크드 리스트(linked list)는 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조이다. 이름에서 말하듯이 데이터를 담고 있는 노드들이 연결되어 있는데, 노드의 포인터가 다음이나 이전의 노드와의 연결을 담당하게 된다. 여기서 하나의 박스가 노드라고 보면된다. 박스의 옆부분이 링크 부분이며 각 노드 안에는 key값 또는 key값 value값 쌍이 들어간다. 다음 노드를 계속 가리키면서 하나의 줄줄이 소세지 같은 모습을 한다. 연결 리스트의 종류로는 한 방향 연결 리스트, 양 방향..

Tistory

[자료구조] Singly Linked List(한 방향 연결리스트) class 구현 (python)

[자료구조] Singly Linked List(한 방향 연결리스트) class 구현 살펴볼 주요 개념: 더보기 - 한 방향 연결리스트의 클래스 구성(Node, SinglyLinkedList) - 클래스 내부 메소드 한 방향 연결리스트를 파이썬으로 구현하기 위해서는 두 개의 클래스가 필요하다. 노드 클래스를 통해 각 노드를 정의하여 링크로 잇고, 이어진 리스트를 연산에 활용하는 singlyLinkedList 클래스가 필요하다. 아래에서는 두 가지 클래스를 구현해보도록 한다. 1. 한 방향 연결리스트의 클래스(node) class Node: def __init__(self, key = None, value = None): self.key = key self.next = None def __str__(self..

Tistory

[Algorithm] 5-(1) 정렬 - 선택 정렬, 삽입 정렬

[Algorithm] 5-(1) 정렬 - 선택 정렬, 삽입 정렬 1. 선택 정렬 처리되지 않은 데이터 중 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것을 반복한다. 선형탐색으로 처리를 한다. 1) 구현 방법 이중 반복문을 통해 선택 정렬을 구현할 수 있다. array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(array)): min_index = i # 가장 작은 원소의 인덱스 for j in range(i + 1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array[min_index], array[i] #스와프 2) 선택 정..

Tistory

[Algorithm] 5-(2). 정렬 - 퀵 정렬

[Algorithm] 5-(2). 정렬 - 퀵 정렬 기준 데이터를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법이다. 일반적 상황에서 가장 많이 사용된다. 병합 정렬과 더불어 대부분 프로그래밍 언어의 정렬 라이브러리의 근간이 되는 알고리즘이며, 가장 기본적 퀵 정렬은 첫 번째 데이터를 기준 데이터(피봇)로 설정한다. 피봇값 설정 -> 정렬 -> 분할 -> 왼쪽 데이터 퀵정렬 -> 오른쪽 데이터 퀵정렬 5 7 9 0 3 1 6 2 4 8 첫번째 원소가 피봇으로 설정된다. 이상적인 경우 시간 복잡도가 O(NlogN)이 될 수 있다. 데이터 확인 개수가 절반씩 줄어들기 때문이다. 그러나, 최악의 경우 O(n2)의 시간 복잡도를 가진다.

Tistory

[Algorithm] 4-(2) 재귀함수

[Algorithm] 4-(2) 재귀함수 1. 개념과 특징 자기 자신을 다시 호출하는 함수다. DFS를 실질적으로 구현하고자 할 때 사용하기도 한다. def recursive_function(): print(‘재귀 함수를 호출한다.’) recursive_function() recursive_function() 재귀 함수를 문제 풀이에서 사용할 때는 재귀 함수의 종료 조건을 반드시 명시해야 한다. 즉, 다시 자기자신을 부르는 return값 이외에 일정 조건(종료조건)이 되면 return 해주는 식이 있어야 한다. 종료 조건을 제대로 명시하지 않으면 함수가 무한히 호출될 수 있다. 파이썬은 최대 재귀 깊이 제한이 있다. 조건을 두지 않고 재귀적으로 함수를 호출하면 무한으로 생성되지 않고 오류가 나면서 종료된..

Tistory

[Algorithm] 4-(3). DFS(Depth-First Search)

[Algorithm] 4-(3). DFS(Depth-First Search) 깊이 우선 탐색이라고 부르며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. 1. 그래프의 기본구조 노드와 간선으로 표현된다. 노드를 정점이라고도 말한다. 그래프 탐색은 하나의 노드를 시작으로 다수의 노드를 방문하는 것을 말한다. 두 노드가 간선으로 연결되어 있으면 인접하다고 표현한다. + 인접 행렬과 인접 리스트에 대한 개념을 확실히 해야 한다. 인접 행렬 : 2차원 배열로 그래프의 연결 관계를 표현하는 방식 인접 리스트 : 리스트로 그래프의 연결 관계를 표현하는 방식 파이썬에서 리스트로 행렬을 표시할 때에는 graph = [ [0, 7, 5], [7, 0, inf], [5, inf, 0] ] 이런 식으로 표현을 한다..

Tistory

[Algorithm] 4-(4) BFS(Breadth-First Search)

[Algorithm] 4-(4) BFS(Breadth-First Search) 너비 우선 탐색이라고 부르며, 그래프에서 가까운 노드부터 우선 탐색하는 알고리즘이다. BFS는 큐 자료구조를 이용한다. 동작 과정 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다. 큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리한다. 더 이상 (2)번 과정을 수행할 수 없을 때 까지 반복한다. 최단 거리 목적을 달성하기 위한 알고리즘으로 사용되기도 한다. 대표 문제 https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 ..

Tistory

[Algorithm] 2. 그리디 알고리즘(Greedy)

[Algorithm] 2. 그리디 알고리즘(Greedy) 1. 개념과 접근 방법 1) 개념 : 현재 상황에서 지금 당장 좋은 것만 고르는 방법이다. 2) 접근 방법 일반적으로 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요한다. 특정 문제를 만났을 때 단순히 현재 상황에서 가장 좋아 보이는 것만을 선택해도 문제를 풀 수 있는지를 파악할 수 있어야 한다. 이를 위해 정당성 분석이 가장 중요하다. 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는 지 검토하여야 한다. 다양한 아이디어를 떠올려보면서 고민을 해야 하고 창의적 발상을 통한 가정과 그 풀이 방법에 대한 검증이 필요하다. 보통 ‘최소’의 횟수, 금액, 개수 등을 요구한다. 그리디는 최적의 해를 보장할 수 없..

Tistory

[Algorithm] 3. 구현

[Algorithm] 3. 구현 1. 개념과 접근 1) 개념 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다. problem - thinking - soultion 문제가 있고, 그것을 생각해서 해결점을 제시하는 것, 모든 문제가 구현 유형의 문제라고 할 수 있다. 모든 문제가 구현의 과정을 거쳐야 한다. 피지컬이 좋다 => 구현을 잘한다. (기초 체력과 같다.) 다만 협의적으로 볼 때, 구현이 어려운 문제를 ‘구현’ 유형의 문제라고 한다. 2) 접근 방법 풀이를 떠올리는 것은 쉽지만, 소스코드로 옮기기 어려운 문제가 이에 해당한다. ex. 알고리즘은 간단한데 코드가 지나칠 만큼 길어지는 문제 실수 연산을 다루고, 특정 소수점 자리까지 출력해야 하는 문제 문자열을 특정한 기준에 따라서 끊어 처리해야 ..

Tistory

[Algorithm] 4. 그래프 탐색 알고리즘

[Algorithm] 4. 그래프 탐색 알고리즘 탐색이란 많은 양의 데이터 중 원하는 데이터를 찾는 과정이다 대표적인 그래프 탐색 알고리즘은 DFS, BFS가 있다. DFS/BFS는 코테에서 매우 자주 등장하는 유형이기에 반드시 숙지해야 한다. 1. 필수 개념 자료구조의 기초 개념으로 스택과 큐가 있으며, 두 핵심적인 함수로 구성된다. Push(삽입) : 데이터를 삽입한다. Pop(삭제) : 데이터를 삭제한다. 스택과 큐는 오버플로우, 언더플로우를 고민해야 한다. 오버플로우는 자료구조가 수용할 수 있는 데이터 크기를 가득 찬 상태에서 삽입 연산할 때 발생 언더플로우는 데이터가 없는 상태에서 삭제 연산을 할 때 발생

Tistory

[자료구조] 스택, 큐, 덱

[자료구조] 스택, 큐, 덱 들어가며. 스택, 큐, 덱은 알고리즘이라기 보다는 data를 관리하는 구조라고 할 수 있다. 스택, 큐, 덱을 활용한 알고리즘이 BFS, DFS 등등이 되는 것이다. 비유를 하자면, 우리가 운동할 때 힘(input)을 들여 수축과 이완(자료구조)을 통해 어떤 자세(알고리즘)를 반복 수행해서 근육을 얻고 지방을 태우는(Output) 과정을 수행하는 것에 비유를 할 수 있겠다. 운동은 굽히고 펴는 것부터 시작한다. 이처럼 기본적인 것이 자료구조이며, 이를 잘 알고 이에 대한 특성을 잘 활용할 때 좋은 알고리즘을 통해 뛰어난 프로그램을 만들 수 있는 것이다. 1. 기본적인 개념 더보기 배열(Array) vs 리스트(list) 가장 기본이 되는 순차적(sequential) 자료 구조..

Tistory

[Algorithm] 1. 시간 복잡도, 공간 복잡도

[Algorithm] 1. 시간 복잡도, 공간 복잡도 1. 복잡도란? 더보기 알고리즘의 성능을 나타내는 척도 얼마나 복잡한지를 의미한다. 높아질 수록 좋지는 않은 것이다. 알고리즘은 컴퓨터 속에서 돌아간다. 그렇기 때문에 얼마나 더 오래 걸리느냐, 얼마나 더 큰 용량을 차지하느냐로 복잡도를 계산한다. 이를 각각 시간 복잡도, 공간 복잡도라고 한다. 시간 복잡도와 공간 복잡도는 일종의 거래 관계에 있다. 마치 역세권을 희망하면 월세가 높아지고, 월세를 낮추려면 역세권을 포기해야 하는 것처럼 메모리를 더 사용하는 대신 시간을 줄일 수도 있고 시간을 더 쓰는 대신 메모리 용량을 작게 사용할 수 있다. 이 계산은 우리가 유한한 성능을 가진 컴퓨터와 기기들을 가지고 있기 때문에, 효율적이고 더 빠르고, 더 경제적..

Tistory

[백준] 1978 소수 찾기 python 알고리즘 문제

문제 1978. 소수 찾기 1. 나의 코드와 발상 과정 ## 오답 n = int(input()) num_list = list(map(int, input().split())) ans = 0 for i in range(n): a = num_list[i] if a == 2 or a == 3 or a == 5 or a == 7: ans += 1 elif a == 1 or a % 2 == 0 or a % 3 == 0 or a % 5 == 0 or a % 7 == 0: continue else: ans += 1 print(ans) 1은 소수가 아니다. 소수는 1과 자기자신만을 약수로 가지는 수이다. 그렇다면 소수가 아닌 수에 공통적으로 들어가 있는 소수는 무엇일까? 아 2, 3, 5, 7이 있지 않을까. 그러면 2..

Tistory

[백준] 1920 수 찾기 python 알고리즘 문제

문제 1920. 수 찾기 1. 나의 코드와 발상 과정 import sys n = int(input()) num_list = list(map(int, sys.stdin.readline().split())) m = int(input()) find_list = list(map(int, sys.stdin.readline().split())) num_list.sort() def count_by_range(array, target, start, end): if start > end: return 0 mid = (start + end) // 2 if array[mid] == target: return 1 elif array[mid] > target: return(count_by_range(array, target, ..

Tistory

[백준] 10816 숫자 카드 2 python 알고리즘 문제

문제 10816. 숫자 카드 2 1. 나의 코드와 발상 과정 (1) 제출 답안 from bisect import bisect_left, bisect_right import sys n = int(input()) num_list = list(map(int, sys.stdin.readline().split())) m = int(input()) find_list = list(map(int, sys.stdin.readline().split())) num_list.sort() def count_by_range(array, left, right): right_index = bisect_right(array, right) left_index = bisect_left(array, left) return right_ind..

Tistory

[백준] 10773 제로 python 알고리즘 문제

문제 10773. 제로 1. 나의 코드와 발상 과정 import sys k = int(sys.stdin.readline()) money_list = [] for i in range(k): a = int(sys.stdin.readline()) if a == 0: money_list.pop() else: money_list.append(a) print(sum(money_list)) 문제도 어렵지 않았고, 코드 구성도 간단했다. money_list 속에 a를 받아오는데, 만약 0이라면 현재 입력값을 넣지 않고, 그 전 반복에서 넣었던 숫자를 뺀다. a가 0이 아닐 경우에만 계속 list에 집어 넣고, money_list의 전체 입력값을 더해 출력한다. 문제 출처: https://www.acmicpc.net/p..

Tistory

[백준] 9012 괄호 python 알고리즘 문제

문제 9012. 괄호 1. 나의 코드와 발상 과정 ### 오답 from collections import deque queue = deque() n = int(input()) vps_list = list() ans_list = [] for i in range(n): vps_list.append(deque(input())) for vps in vps_list: if len(vps) % 2 != 0 or vps[0] == ')': ans_list.append('NO') continue else: while True: if len(vps) == 0: ans_list.append('YES') break if vps[-2] == '(' and vps[-1] == ')': vps.pop() vps.pop() els..

Tistory

[백준] 4949 균형잡힌 세상 python 알고리즘 문제

문제 4949. 균형잡힌 세상 1. 나의 코드와 발상 과정 import sys answer_list = [] while True: a = sys.stdin.readline().rstrip() if a == '.': break answer = [] for i in a: if i.isalpha() or i == " ": continue elif i == '.': break elif i == '(': answer.append(i) elif i == '[': answer.append(i) elif i == ')': if len(answer) != 0 and answer[-1] == '(': answer.pop() else: answer.append(')') continue elif i == ']': if len..

Tistory

[백준] 10866 덱 python 알고리즘 문제

문제 10866. 덱 1. 나의 코드와 발상 과정 import sys from collections import deque n = int(input()) queue = deque() answer = [] for _ in range(n): order = sys.stdin.readline().strip() if order[0:10] == 'push_front': queue.append(int(order[11:])) elif order[0:9] == 'push_back': queue.appendleft(int(order[10:])) elif order[0:9] == 'pop_front': if not queue: answer.append(-1) else: answer.append(queue.pop()) eli..

Tistory

[백준] 11866 요세푸스 문제 0 python 알고리즘 문제

문제 11866. 요세푸스 문제 0 1. 나의 코드와 발상 과정 from collections import deque queue = deque() answer = [] n, k = map(int, input().split()) for i in range(1, n+1): queue.append(i) while len(answer) < n: for i in range(k-1): queue.append(queue.popleft()) answer.append(queue.popleft()) print("") 예제 입력을 보고 순간 이해가 되지 않았다. 1~7번째의 사람이면 첫 번째 죽는 사람은 3번째 사람인데, 왜 6번째 사람이 1번으로 죽는 것인지에 대해 의문이었다. 그렇지만 잘못 이해했다는 것을 금방 알 수 ..

Tistory

[백준] 2164 카드2 python 알고리즘 문제

문제 2164. 카드2 1. 나의 코드와 발상 과정 from collections import deque n = int(input()) queue = deque([i for i in range(n, 0, -1)]) while len(queue) > 1: queue.pop() queue.rotate(1) # queue.appendleft(queue.pop()) print(queue[0]) 4321 을 예로 들면, 1번이 빠지고 432가 남고 그다음 2를 맨 뒤에 배치해서 243이 되게 만든다. 이 순환을 반복해서 하나의 원소만 남게 하면 된다. 구글 선생님께 queue.appendleft(queue.pop())의 과정을 단순하게 할 수 있는 것이 무엇이 있냐 했더니, collection.deque 모듈의 ..

Tistory

[백준] 1436 영화감독 숌 python 알고리즘 문제

문제 1436. 영화감독 숌 1. 나의 코드와 발상 과정 doom_list = [] i = 0 while True: if '666' in str(i): doom_list.append(i) i += 1 if len(doom_list) == 10000: break print(doom_list[int(input())-1]) 일단 문제에 대한 이해가 살짝은 필요했다. 반복되는 6이 세번 있으면 그 숫자를 영화의 제목으로 쓰는 것이다. 1편부터 쓰는 영화의 제목에 들어갈 수는 다음과 같다. 666, 1666, 2666, 3666, 4666, 5666, ... 6편까지는 앞자리 숫자가 바뀌는데, 7번째부터 숫자가 바뀐다. 6660, 6661, 6662, 6663, ... 6666, ... 6669, 7666, ....

Tistory

[백준] 10828 스택 python 알고리즘 문제

문제 10828. 스택 1. 나의 코드와 발상 과정 import sys n = int(input()) queue = [] for _ in range(n): order = sys.stdin.readline().strip() if order[0:4] == 'push': queue.append(int(order[5:])) elif order[0:3] == 'top': if not queue: print(-1) else: print(queue[-1]) elif order[0:4] == 'size': print(len(queue)) elif order[0:5] == 'empty': if len(queue) == 0: print(1) else: print(0) else : if not queue: print(-1)..

Tistory

[백준] 10845 큐 python 알고리즘 문제

문제 10845. 큐 1. 나의 코드와 발상 과정 import sys from collections import deque n = int(input()) queue = deque() for _ in range(n): order = sys.stdin.readline().strip() if order[0:4] == 'push': queue.appendleft(int(order[5:])) elif order[0:5] == 'front': if not queue: print(-1) else: print(queue[-1]) elif order[0:4] == 'back': if not queue: print(-1) else: [print(queue[0])] elif order[0:4] == 'size': print..

Tistory

[백준] 1018 체스판 다시 칠하기 python 알고리즘 문제

문제 1018. 체스판 다시 칠하기 1. 나의 코드와 발상 과정 n, m = map(int, input().split()) board_list = [] for i in range(n): board_list.append(input()) # 연산(보드판을 일부 잘라 체크무늬로 칠해져 있는지 확인) test_list = [] for i in range(n - 7): # 찾을 출발점 for j in range(m - 7): first_W = 0 first_B = 0 for k in range(i, i + 8): for l in range(j, j + 8): if (k + l) % 2 == 0: if board_list[k][l] != 'W': first_W += 1 if board_list[k][l] != 'B..

Tistory

[백준] 10814 나이순 정렬 python 알고리즘

문제 10814. 나이순 정렬 1. 나의 코드와 발상 과정 # 정답 (4092ms) n = int(input()) member_list = [] for i in range(n): member_list.append(list(input().split())) member_list.sort(key = lambda x: int(x[0])) for i in range(n): print(member_list[i][0], member_list[i][1]) # 런타임 에러(IndexError) n = int(input()) member_list = {} for i in range(n): age, name = list(map(str, input().split())) member_list[name] = int(age) s1..

Tistory

[백준] 1181 단어 정렬 python 알고리즘 문제

문제 1181. 단어 정렬 1. 나의 코드와 발상 과정 n = int(input()) word_list = [] for i in range(n): word_list.append(str(input())) word_list = list(set(word_list)) ## attribute error word_list.sort() word_list.sort(key = lambda x : len(x)) for word in word_list: print(word) 잘 돌아가는 코드이다. word_list를 만들어서 그 안에 입력값들을 저장하고, set() 즉, 집합을 활용해서 중복 원소들을 털어내버리고, sort()로 알파벳 순 정렬을 한 다음에, 문자열 길이를 기준으로 해서 또 정렬을 해준다. 그런 다음 프린트..

Tistory

[백준] 10989 수 정렬하기 python 알고리즘 문제

문제 10989. 수 정렬하기 3 1. 나의 코드와 발상 과정 import sys n = int(sys.stdin.readline()) num_list = [0]*10001 for i in range(n): num = int(sys.stdin.readline()) num_list[num] += 1 for i in range(10001): if num_list[i] != 0: for j in range(num_list[i]): print(i) 굉장히 제한된 시간과 메모리이기 때문에 리스트를 하나 더 생성해서 정렬을 한다던지 하는 방법이 활용될 수 없다. 그래서 10000까지 나오는 자연수이기 때문에 인덱스를 10000까지 가지는 빈 리스트를 만들어서 연속으로 입력되는 num값을 num_list의 인덱스로 ..

Tistory

[백준] 11650 좌표 정렬하기 python 알고리즘 문제

문제 11650. 좌표 정렬하기 1. 나의 코드와 발상 과정 import sys n = int(sys.stdin.readline()) num_list = [] for i in range(n): m = list(map(int, sys.stdin.readline().split())) num_list.append(m) num_list.sort() for i in range(n): print(num_list[i][0], num_list[i][1]) ###################### #오답 import sys n = int(sys.stdin.readline()) num_list = [] for i in range(n): m = list(map(int, sys.stdin.readline().split()))..

Tistory

[백준] 7568 덩치 python 알고리즘 문제

문제 7568. 덩치 1. 나의 코드와 발상 과정 import sys n = int(sys.stdin.readline()) num_list = [] for i in range(n): x, y = map(int, sys.stdin.readline().split()) num_list.append([x, y]) def dungchi(x, y): k = 0 for i in range(n): if x < num_list[i][0] and y < num_list[i][1]: k += 1 return k rank_list = [] for i in range(n): rank_list.append(dungchi(num_list[i][0], num_list[i][1])) for i in range(n): print(ran..

Tistory

[백준] 2798 블랙잭 python 알고리즘 문제

문제 2798. 블랙잭 1. 나의 코드와 발상 과정 n, m = map(int, input().split()) card_num = list(map(int, input().split())) card_num.sort(reverse = True) card_sum = [] for i in range(n): for j in range(n): for k in range(n): if i == j or i == k or j == k: continue card_sum.append(card_num[i]+card_num[j]+card_num[k]) card_sum.sort(reverse = True) for i in range(len(card_sum)): if int(card_sum[i]) > m: continue else..

Tistory

[백준] 2869 달팽이는 올라가고 싶다 python 알고리즘 문제

문제 2869. 달팽이는 올라가고 싶다. 1. 나의 코드와 발상 과정 ### 시간초과 a, b, v = map(int, input().split()) day = v // (a - b) + 1 len_sum = 0 for i in range(1, day): len_sum += a if len_sum >= v: print(i) break else : len_sum -= b ##### a, b, v = map(int, input().split()) day = (v - b) // (a - b) if (v - b) % (a - b) == 0: print(day) else: print(day + 1) 0.15초라는 시간제한이 있기 때문에 최소한의 반복을 해야 한다. 반복문을 쓰지 않고 풀어보았다. (위에껀 써봤더니..

Tistory

[백준] 11050 이항 계수 python 알고리즘 문제

문제 11050. 이항 계수 1 1. 나의 코드와 발상 과정 def fac(n): if n == 0: return 1 return n * fac(n-1) n, k = map(int, input().split()) print(fac(n)//(fac(k)*fac(n-k))) def를 처음 알고리즘 공부에 사용하기 시작하였다. 이항계수가 뭔지 몰라 구글 선생님께 물어보다가 이항계수는 팩토리얼 개념이 들어가 있다는 것을 알았다. 아하... 조합... 계속해서 곱하는 것을 다음과 같이 할 수 있다는 정보를 얻을 수 있었다. (1) 반복문 (2) 재귀함수 구현 이제 함수도 구현해야 하니까.. 직접 네 줄의 코드를 짜보았다. 어제 재귀함수 강의 살짝 듣고 복습했는데 구상을 하려고 하니 머리가 아팠지만 금방 떠올려서 ..

Tistory

[백준] 2839 설탕 배달 python 알고리즘 문제

문제 2839. 설탕 배달 1. 나의 코드와 발상 과정 n = int(input()) new_n1, new_n2 = n, n cnt1, cnt2 = 0, 0 cnt1 += new_n1 // 5 new_n1 = new_n1 - cnt1 * 5 cnt1 += new_n1 // 3 if new_n1 % 3 != 0 : vari1 = -1 else : vari1 = cnt1 cnt2 += new_n2 // 3 new_n2 = new_n2 - cnt2 * 3 cnt2 += new_n2 // 5 if new_n2 % 5 != 0 : vari2 = -1 else : vari2 = cnt2 if vari1 == -1 : if vari2 > 0 : print(vari2) else : print(-1) elif vari2..

Tistory

[백준] 10250 ACM 호텔 python 알고리즘 문제

문제 10250. ACM 호텔 1. 나의 코드와 발상 과정 (오답) ## 오답 1. t = int(input()) ans_list = [] for i in range(t): h, w, n = map(int,input().split()) if n // h + 1 < 10 and n % h != 0 : answer = str(n % h) + '0' + str(n // h + 1) elif n // h + 1 < 10 and n % h == 0 : answer = str(h) + '0' + str(n // h) else : if h == 1 and n // h + 1 < 10: answer = str(h) + '0' + str(w) elif h == 1 and w >= 10: answer = str(h) + ..

Tistory

[백준] 2231 분해합 python 알고리즘 문제

문제 2231. 분해합 1. 나의 코드와 발상 과정 n = int(input()) n_list = list(range(1,1000001)) for i in range(len(n_list)): m = 0 struc = list(map(int, str(n_list[i]))) m = n_list[i] + sum(struc) if m == n: print(n_list[i]) break if m != n: print(0) 처음에 이해를 잘 하지 못했는데 예제를 잘 들여다보면 금방 파악할 수 있다. 216을 입력 받으면 216을 '만들수 있는' 생성자 216 = '198'+1+9+8 을 찾아내라는 문제이다. 그럼 저건 어떻게 알 수 있을까 고민을 해보았는데, 배열을 두 개 만들면 되지 않나 하는 생각을 했다. N이..

Tistory

[백준] 1267 python 알고리즘

문제 1267. 핸드폰 요금 1. 나의 코드와 발상 과정 n = int(input()) calltime = list(map(int, input().split())) # 영식 요금제 y yfee = 0 for i in range(len(calltime)) : yfee = yfee + (calltime[i] // 30) * 10 if (calltime[i] % 30) < 30 : yfee += 10 else : yfee += 20 # 민식 요금제 m mfee = 0 for i in range(len(calltime)) : mfee = mfee + (calltime[i] // 60) * 15 if (calltime[i] % 60) < 60 : mfee += 15 else : mfee += 30 if yfee ..

Tistory

[백준] 1546. 평균 python 알고리즘

문제 1546. 평균 1. 나의 코드와 발상 과정 n = int(input()) scores = list(map(int, input().split())) m = max(scores) new_scores = list() for i in range(len(scores)) : new_scores.append(scores[i] / m * 100) sum = 0 for i in range(len(new_scores)) : sum += new_scores[i] average = sum / n print(average) 이 문제는 최댓값을 가지고 새로운 점수의 리스트를 만들어 평균만 계산해주면 되는 문제이다. 5번 라인에서 기존의 스코어를 점수/n*100으로 모두 만들어 새로운 스코어 리스트에 집어넣는다. 그런 다음..

Tistory

python 로또 번호 생성기

for 반복문을 배우면 언어를 불문하고 코린이라면 누구든 한 번쯤 보았을 문제! 바로 'random'의 특징과 부동 소수점 곱하기를 활용한 로또번호 생성기 만들어보기. 보통의 문제는 다음과 같죠. import random a = 0 x = [] for i in range(6): a = random.randint(1, 45) x.append(a) x.sort() print(x) 이렇게 랜덤으로 생성된 정수 중 하나를 리스트에 넣고 출력시키는 방식으로 하면 대부분 해결이 되죠. 뭐, 여기에 5개 세트의 게임을 출력하라던지, 아니면 게임 수를 입력받아서 출력시키는 방법도 더해질 수 있습니다. 위의 코드를 실행하면 다음과 같이 됩니다. 로또 번호 같은 것이 생성이 되었습니다. 하지만 마스터가 꿈인 라마스떼는 갑..

Tistory

[백준] 8958 OX 퀴즈 python 알고리즘

문제 8958. OX 퀴즈 1. 좋은 코드 a = int(input()) for i in range(a): b = input() data = list(b) result = 0 k = 1 for i in data: if i == "O": result += k k += 1 else: k = 1 print(result) 더 좋은 코드를 찾다 발견했다. 'data' 리스트, 2중 for문, 문자열을 특징을 활용해서 간결하게 각 케이스의 'O'의 개수인 result를 뽑아내고 있다. 2. 나의 접근과 발상 try_game = int(input()) ox_all_list = [] # X 기준으로 글자를 잘라 리스트로 저장 # filter 함수를 이용하여 ox_list의 공백을 제거 for i in range(try..

1 2 3