목록전체 글 (447)
For Programmer

소스코드(시간복잡도 O(X)) def oldIs_prime_number(x): #시간복잡도가 X # 2부터 x의 제곱근까지의 모든 수를 확인하며 for i in range(2,x): #x가 해당 수로 나누어 떨어진다면 if x % i == 0: return False #소수가아님 return True #소수임 시간복잡도 개선하기 개선된 소스코드(시간복잡도 X의 1/2승) def newIs_prime_number(x): #시간복잡도가 N의 1/2승 # 2부터 x의 제곱근까지의 모든 수를 확인하며 for i in range(2,int(math.sqrt(x))+1): #x가 해당 수로 나누어 떨어진다면 if x % i == 0: return False #소수가아님 return True #소수임 print(ne..

소스 코드 from collections import deque #노드의 개수와 간선의 개수를 입력 받기 v,e = map(int,input().split()) #모든 노드에 대한 진입차수는 0으로 초기화 indegree = [0] * (v+1) #각 노드에 연결된 간선 정보를 담기 위한 연결 리스트를 초기화 graph=[[] for i in range(v+1)] #방향 그래프의 모든 간선 정보를 입력 받기 for _ in range(e): a,b = map(int,input().split()) graph[a].append(b) #정점 A에서 B로 이동 가능 #진입 차수를 1 증가 indegree[b] += 1 #위상 정렬 함수 def topology_sort(): result = [] #알고리즘 수행 ..

-> 신장트리 = 모든 노드가 연결되면서 사이클을 이루지 않는 그래프 -> 최소신장트리 - 신장트리중에 간선의 합이 최소인 신장트리 소스코드 # 특정원소가 속한 집합을 찾기 def find_parent(parent, x): # 루트 노드를 찾을 때까지 재귀 호출 if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] # 두 원소가 속한 집합을 찾기 def union_parent(parent, a, b): a = find_parent(parent, a) b = find_parent(parent, b) if a < b: parent[b] = a else: parent[a] = b #노드의 개수와 간선(Union 연산)의 개..
Java에서는 setter와 getter를 생성하기위해 엄청나게 많은 코드가 필요하다. 예를들어 보면 public class Person { private String name; // constructor public Person(String name){ this.name = name; } // get method get set method public String getName() { return this.name; } // set method public void setName(String name){ this.name = name; } } 다음과 같이 name private 변수하나에 20줄 가까이 코드가 나오게 된다. 하지만 위의 코드를 코틀린은 구현하면 한줄 안에 해결 할 수 있다. class ..
객체 지향 프로그래밍이란 무엇일까? 그렇다면 우선 객체란 무엇일까? 정답은 이름이 있는 모든 것이다. 이렇게 말로 들으면 생소하지만 객체지향형 공부를 조금이라도 해보면 어떤 느낌인지 대강 알 수 있다. 절차지향프로그래밍은 간단히 얘기해서 코드를 위에서 아래로 실행하면 문제가 해결된다고 생각해보자. 하지만 축구경기를 하기위해 축구경기1,축구경기2 ... 등등을 만들어야 한다고 생각해보자. 절차지향형 프로그래밍에서는 축구경기1,축구경기2 마다 일일이 장황한 코드를 작성해야 한다.(선수생성,심판생성,경기장생성 등등..) 그렇다면 객체지향형 프로그래밍은 이걸 어떻게 해결할 수 있을 까? 축구경기1을 위해서 선수,심판,경기장,관중을 생성해놨다고 하자. 그러면 우리는 축구경기2를 만들기위해 또 장황한 코드를 작성해..
코틀린에서도 for문과 비슷한 기능을 제공하는 while문이 있다. for문과 while문은 코딩을 많이 하다 보면 while문을 썻을때 더 깔끔하거나 for문을 썻을때 더 깔끔할 때가 존재하기 때문에 구분하여 잘 사용하면 된다. 1. while문 var a: Int = 0 var b: Int = 4 while(a
코틀린에서 for문을 이용하여 반복할 수 있는 방법은 아주 많다. 그중 몇가지만 사용해 보고자 한다. List 선언 val a = mutableListOf(1,2,3,4,5,6,7,8,9) for 방법 1 //반복하는 방법(1) for ( item in a ){ print(""+item+" ") //1 2 3 4 5 6 7 8 9 출력 } -> a의 원소들이 차례대로 item에 들어간다고 생각 for 방법 2 //반복하는 방법(2) for( (index,item) in a.withIndex()){ //index와 item에 각각 index와 value값 들어감 println("index: " + index + " item: "+item) } 출력 //index: 0 item: 1 //index: 1 it..
1. 코틀린에서는 Collection 자료형이 원소의 값을 처음 설정한 이후 변경할 수 있는 것과 변경할 수 없는 것으로 나뉘어 진다. 변경할 수 있는 Collection을 Mutable Collection 이라 부르며 변경할 수 없는 Collection을 Immutable Collection 이라고 부른다. Immutable Collection은 원소를 수정, 추가하기 위한 add,set 등과 같은 함수가 존재하지 않는다. Immutable Collection 1. List(Immutable Collection) //List var numberList = listOf(1,2,3,3,3) println(numberList) // List는 중복을 허용한다. println(numberList.get(0))..