전체 글 474

[python 구현]DFS에서 꼭 필요한 개념 - 조합 (combination)

N개중에서 r개를 뽑는 경우를 어떻게 구할까? 바로 조합을 이용하면 구할 수 있다. 조합은 중복을 허락하지않고 순서를 생각하지 않는다. n = 4, m = 2 아래 사진이 4까지의 숫자에서 2자리 수를 출력하는 코드의 상태트리이다. D(0,1)에서 처음 시작한다. 0은 level을 1은 start를 의미한다. 출력할 숫자를 담을 배열을 res라고 하자 (크기는 m 만큼이다.) 두번째 인수(start)보다 크거나 같은 수를 res 배열의 level 자리수에 넣어가며 for문을 돌린다. 즉, 위와 같은 경우 res는 0,1 index만 존재하기 때문에 level이 2가 종료 조건이다. 첫번째 인수는 Level이므로 한단계씩 진행됨에 따라 1씩 증가시킨다. 두번재 인수는 res에 들어간 수에서 1을 증가시켜 ..

[삼성SW역량][Python/BOJ] 백준 15686 치킨 배달(DFS)

https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 조합을 이용해서 치킨집들의 조합을 구한다. 이 치킨집들과 집들의 각각 치킨거리를 구해 가장 작은 값을 구하면 된다. 코드 : n,m = map(int,input().split()) mp = [list(map(int,input().split())) for i in range (n)] hs = [] ch = [] cb = [0]*m # 조합 # 선택할 치킨집의 인덱스를 담은 배열..

[삼성SW역량][Python/BOJ] 백준 14891 톱니바퀴(시뮬레이션)

https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 이 문제는 문제와 문제에 나와있는 예시를 잘 읽어야한다. 원래 머리에 생각하고 있는 대로 풀면 틀린다. 처음 풀 때 예시가 잘 이해 안되서 예시가 틀린건가..하고 안봤다가 잘못 이해하고 풀었다. 1. 옆 톱니를 움직인다. (움직인 톱니의 옆친구와 극이 다르면 옆친구도 움직인다.) 2. 해당 톱니를 움직인다. 옆톱니를 움직일 때도 이제는 자신이 해당 톱니가 되어서 옆 톱니를 먼저 확인한다-!! ..

[JAVA의 정석]Ch7_다형성과 추상클래스

1. 다형성 (Polymorphism) 상속 관계에 있을 경우, 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하도록 하는 것이 가능하다. SmartTv s = new SmartTv(); Tv t = new SmartTv(); 둘 다 같은 타입의 인스턴스 (smartTv)이지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다. t와 s로 접근할 수 있는 멤버들이 다르다. 반대로, 자손타입의 참조변수로 조상타입의 인스턴스를 참조하는 것은 불가능하다. 상속관계에 있는 클래스 사이에서는 참조변수도 형변환이 가능하다. 조상타입의 참조변수로는 인스턴스의 멤버들을 모두 사용할 수 없기 때문에, 실제 인스턴스와 같은 타입의 참조변수로 형변환을 해야만 인스턴스의 모든 멤버들을 사용할 수 있다..

[도서리뷰]<성공하는 프로그래밍 공부법>

학교 도서관에서 프로그래밍 쪽을 서성이다가 이 책을 발견하였다. 취준을 시작하고 조금씩 공부를 해가면서 어떻게 공부를 해야하는지 막막한 기분으로 찾아갔던 도서관에서 이런 이름의 책을 발견했으니 집어 들 수밖에 없었다. 한번 읽고 마는 것이 아니라 계속 보면서 성공하는 프로그래머가 되기 위해 내용을 정리하였다. 책의 표지 목차 1. 프로그래밍 공부법 2. 의도적 수련과 소프트웨어 장인정신 3. 컴퓨터와 사람들과 소통하는 국어 이야기 4. 교양있는 당신을 위한 프로그래밍 공부법 1. 프로그래밍 공부법 사람들이 학습을 지속하려면 힘들 때 같이 공감하고, 격려해줄 사람이 필요하다. 아무리 온라인 컨텐츠가 많아도 결과적으로는 사람이 가장 중요하다. 가장 중요한 점은 작은 성취감을 지속적으로 맛보면서 프로그래밍에 ..

[JAVA의 정석]Ch7_객체지향_생성자와 상속

1-1. 생성자요? 생성자는 인스턴스가 생성될 때 호출되는 "인스턴스 초기화 메서드"이다. 생성자는 1. 리턴 값이 없고, 2. 생성자의 이름과 클래스의 이름은 같아야한다. + 생성자도 오버로딩이 가능하다. 생성자는 인스턴스를 생성하는 것이 아니고 단순히 인스턴스 변수들의 초기화에 사용되는 조금 특별한 메서드일 뿐이다. 사실 모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야한다. 지금까지 생성자 없이 인스턴스를 생성할 수 있었던 이유는 기본 생성자(Default constructor) 덕분이다. 기본 생성자는 컴파일러가 제공하는 생성자로 아무것도 하지 않아도 알아서 넣어준다. 이것은 클래스 내에 '생성자가 하나도 없을 때 '뿐이라는 것을 명심-!! 생성자를 이용한다면 인스턴스를 생성하는 동시에..

[JAVA의 정석]Ch6_객체지향_변수와 메서드(+static 블록)

1-1. 변수의 종류 - 인스턴스 변수, 클래스 변수, 지역변수 변수는 클래스 변수, 인스턴스 변수, 지역변수 모두 세 종류가 있다. 클래스 영역이 아닌 곳에서 선언된 변수는 지역변수 멤버 변수 중 static 이 붙은 변수는 클래스 변수 , 붙지 않은 변수는 인스턴스 변수이다. 인스턴스 변수는 인스턴스가 생성될 때 만들어진다. 인스턴스마다 별도의 저장공간을 가지므로 서로 다른 값을 가질 수 있다. 클래스 변수는 클래스가 메모리에 올라갈 때 생성된다. static를 붙이면 만들어지고 모든 인스턴스가 공통된 저장공간(변수)를 공유하게 된다. 인스턴스를 생성하지 않고 언제라도 바로 사용할 수 있다. 1-2. 메서드 메서드는 선언부와 구현부로 나뉜다. 선언부는 '메서드의 이름', '매개변수 선언', '반환타입..

백트래킹과 DFS가 무슨 관계인가요?

백트래킹은 경우의 수 중에서 유망하지 않은 것을 거르는 방법으로 이것을 구현한는 방법은 다양하며 BFS, DFS등으로 구현할 수 있다. https://what-am-i.tistory.com/286?category=966524 [삼성SW역량][Python/BOJ] 백준 14889 스타트와 링크(DFS, 백트레킹) https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.ne.. what-am-i.tistory.com 여기 이 스타트와 링크문제의 풀이는 백트래킹 구현을 위해 DFS를 ..

[삼성SW역량][Python/BOJ] 백준 14889 스타트와 링크(DFS, 백트레킹)

https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net # depth은 뽑은 사람의 인원수, idx는 뽑은 사람 다음부터 뽑기위해서 저장 💻 코드 : def dfs(depth, idx) : # depth는 사람의 수 global min_diff if depth == n//2 : power1, power2 = 0,0 for i in range(n) : for j in range(n) : if vis[i] and vis[j] : # i와 j가 동시에 우리팀! power1+= ..

[삼성SW역량][Python/BOJ] 백준 14888 연산자 끼워넣기(DFS)

https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net dfs(idx,val) : val 이 기존 값 , idx는 이제 더할 값의 인덱스 다음 dfs는 val에 idx인덱스의 값을 (더하거나 ,빼거나 곱하거나 나눠주고) idx를 1 증가시킨다.) 그래서 처음에 dfs(1, numbers[0]) 를 호출해주는 것이다. numbers[0]을 가장 초기값으로 idx가 1인 값을 선택된 기호로 계산하여 ..