코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 문제 설명 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위당첨 내용 1 6개 번호가 모두 일치 2 5개 번호가 일치 3 4개 번호가 일치 4 3개 번호가 일치 5 2개 번호가 일치 6(낙첨) 그 외 로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여,..
1. 이름 붙은 반복문 반복문에서 break문은 근접해있는 단 하나의 반복문만 벗어나고 있고, 여러 개의 반복문이 중첩되어 있는 경우에는 온전히 반복문을 벗어날 수 없다. continue문도 마찬가지이다. 이럴 경우 반복문에 이름을 지정해 주고 break문과 continue문 뒤에 반복문 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있다. 2. 예제코드 loop : for(int i=1; i
향상된 for문(enhanced for statement) JDK 1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 접근할 수 있도록 for문의 새로운 문법이 추가되었다. for(타입 변수명 : 배열 또는 컬렉션){ //반복 } 형태는 위와 같다. 배열 또는 컬렉션에 접근할 때 인덱스로 접근하는 것이 아닌, 배열 또는 컬렉션에 저장 된 요소가 매 반복마다 하나씩 순서대로 해당 변수에 저장된다. 그리고 반복문 내에서 해당 변수를 이용해서 코드를 짜면된다. + 당연히 변수의 타입은 배열 또는 컬렉션에서 꺼내오기 때문에 배열 또는 컬렉션의 요소의 타입과 같아야한다. 기존 for문과의 비교 int[] arr = new int[]{1, 2, 3, 4, 5}; for (int i = 0;..
1. 조건 연산자(삼항 연산자) ? : 자바에서 조건 연산자는 if문(조건문)과 같은 개념으로 if문 대신 조건 연산자를 사용하면 코드를 보다 간단히 할 수 있다. 조건 연산자는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자이다. 조건식 ? 식1 : 식2 조건식이 true일 때 식1 반환 조건식이 false일 때 식2 반환 result = (x > y) ? x : y ex) x = 5, y = 3일 때 result = 5 x = 3, y = 5일 때 result = 5 조건 연산자는 조건식의 조건결과가 true이면 식1이, false이면 식2가 각각 반환된다. 2. if문과 비교 //조건연산자 result = (x > y) ? x : y //if문 if(x > y){ result..
5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net 문제 전화번호 목록이 주어진다. 이때, 이 목록이 일관성이 있는지 없는지를 구하는 프로그램을 작성하시오. 전화번호 목록이 일관성을 유지하려면, 한 번호가 다른 번호의 접두어인 경우가 없어야 한다. 예를 들어, 전화번호 목록이 아래와 같은 경우를 생각해보자 긴급전화: 911 상근: 97 625 999 선영: 91 12 54 26 이 경우에 선영이에게 전화를 걸 수 있는 방법이 없다. 전화기를 들고 선영이 번호의 처음 세 자리를 누르는 순간 ..
1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 문제 트리에서 리프 노드란, 자식의 개수가 0인 노드를 말한다. 트리가 주어졌을 때, 노드 하나를 지울 것이다. 그 때, 남은 트리에서 리프 노드의 개수를 구하는 프로그램을 작성하시오. 노드를 지우면 그 노드와 노드의 모든 자손이 트리에서 제거된다. 예를 들어, 다음과 같은 트리가 있다고 하자. 현재 리프 노드의 개수는 3개이다. (초록색 색칠된 노드) 이때, 1번을 지우면, 다음과 같이 변한다. 검정색으로 색칠된 노드가 트리에서 제거된 노드이다. 이제 리..
1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net 문제 트리(tree)는 사이클이 없는 무방향 그래프이다. 트리에서는 어떤 두 노드를 선택해도 둘 사이에 경로가 항상 하나만 존재하게 된다. 트리에서 어떤 두 노드를 선택해서 양쪽으로 쫙 당길 때, 가장 길게 늘어나는 경우가 있을 것이다. 이럴 때 트리의 모든 노드들은 이 두 노드를 지름의 끝 점으로 하는 원 안에 들어가게 된다. 이런 두 노드 사이의 경로의 길이를 트리의 지름이라고 한다. 정확히 정의하자면 트리에 존재하는 모든 경로들 중에서 ..
11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다. 출력 첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다. 예제입출력 풀이 이번 문제는 문제의 제목이 트리라고 해서 이진트리로 접근하였다. 그래서 괜히 코드만 복잡해지게 되고, 코드를 짜면 짤수록 코드만 복잡해지고 잘못접근..
1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net 문제 진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오. 예를 들어 위와 같은 이진 트리가 입력되면, 전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식) 중위 순회한 결과 : DBAECFG // (왼쪽 자식) (루트) (오른쪽 자식) 후위 순회한 결과 : DBEGFCA //..
error: unmappable character (0xEB) for encoding x-windows-949 코딩테스트 문제를 풀다가 이러한 에러가 발생했다.대충 읽어보니 한글이 인코딩 문제로 빌드 시 오류가 나타난 것 같다. 크게 2가지(+1가지, 난 안돼서 추가함)를 적용해주면 된다. 1. File -> Settings -> File Encodings 이동 Global Encoding과 Project Encoding을 UTF-8로 바꿔주고 Apply 해준다. 2. Help -> Edit Custom Vm Options 클릭 -> idea64.exe.vmoptions파일로 이동 -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8 추가해준다. 3. 그다음 인텔리제이를 클..
트리를 구현하는 방법은 크게 3가지가 있다. 1차원 배열을 이용 2차원 배열을 이용 노드(클래스)를 이용 트리를 구현하는 방법 중 배열을 이용한 방법은 배열의 크기가 정해져있기 때문에 한계가 있다. 따라서 코딩테스트에서 문제를 풀때 많이 활용되지 않을것으로 생각돼서 노드(클래스)를 이용한 구현방법과 순회를 정리하려고 한다. 1. 트리를 구성하는 노드 클래스 class Node { //트리의 노드 정보를 저장할 클래스 int data; //노드 값 Node left; //왼쪽 자식 노드 참조 값 Node right; //오른쪽 자식 노드 참조 값 //추가할 때 참조되는 왼쪽, 오른쪽 자식의 값은 모르닌까 일단 data 값을 기반으로 Node 객체 생성 Node(int data){ this.data = da..
1. 트리(Tree) 트리는 노드(Node)들과 이 노드들을 연결하는 링크(link)로 구성되며 계층적 구조를 표현할 때 사용된다. 조직도 디렉토리 & 서브디렉토리 가계도 선형구조(Linear) - 일직선 상 자료를 구성하는 데이터를 순차적으로 나열시킨 형태 ex) 배열, 리스트, 스택. 큐 비선형구조(NonLinear) - 일직선 상에 있지 않음 하나의 자료 뒤에 여러개의 자료가 존재할 수 있는 것을 의미 ex) 트리, 그래프 2. 트리(Tree)의 용어 노드들 간에는 부모, 형제, 조상, 자손 관계가 존재한다. A는 B의 부모 노드(parent node)이며, 반대로 B는 A의 자식 노드(children node)이다. B, C, D는 형제 관계(sibling)이다. 조상 노드(ancestor nod..
LimHeeSang/starbooks_project: ✔⭐ 로그인, 리뷰, 좋아요, 도서 조회 기능이 있는 도서 홈페이지 (github.com) 이번 팀 프로젝트를 하면서 정말 많은 것을 느꼈고 배웠다. 그리고 앞으로의 공부 방향성도 정할 수 있을 거 같아서 글로 정리하려고 한다. 일단 이번 프로젝트의 목표는 특별한 기술로 특별한 서비스를 만드는 것 보다는 프론트와 백엔드를 분리하여 간단한 토이 프로젝트로 협업하는 과정을 경험을 하는 것이었다. 나는 기술 스택으로 자바 + spring 프레임워크를 선택했다. 이번 프로젝트는 기술적인 목적을 둔 프로젝트가 아니였기에 기술스택 관련보다는 협업과정에서 느낀점과 부족한점에 대해서 말하고자 한다. 일단 팀원 모두가 협업하는 과정이 처음이었고, 모두가 같은 속도로 ..
나는 개발자가 되고싶다고 마음을 먹었지만, 개발직종에서도 어떤분야가 있는지 몰랐다. 따라서 일단 어떤분야가 있는지 찾아보고 나에게 맞는 분야를 찾으려고 노력했다. 구글 유투브등을 이용하여 찾아보았는데 크게 웹 프론트, 백엔드, 안드로이드, ios, AI분야로 찾을 수 있었다. AI쪽은 전문성을 많이 요구하고, 내가 생각했던?것과는 거리가 멀다고 생각했다. 따라서 웹 프론트/백, 안드로이드/ios로 중에서 생각했다. 안드로이드와 ios는 모바일에서 사용하는 애플리케이션개발이라는걸 쉽게 생각했지만, 이때는 웹에서 프론트와 백엔드가 뭔지 처음 들었고 뭔지도 몰랐다. 따라서 웹 프론트와 백이 무엇인지부터 찾아서 공부했다. 워낙 잘 설명되어있는 구글자료들과 유튜브영상이 많아서 개념을 알 수 있었지만, 직접 해보지..
우아한 테크코스 4기 온라인 설명회를 보고나서 자소서 질문중에 프로그래머가 되고싶은 이유가 무엇인가요?라는 질문이 있었다. 한번도 이런생각을 해본적이 없는데 곰곰히 생각해보았다. 단지 재미있어서? 요새 핫한 직종이라서? 내 경험에 빗대어 곰곰히 생각해보았다. 서론 나는 정보보호학과에 진학을 했지만, 내가 희망하던 과도 아니였고 지인의 추천으로 인해서 성적에 맞춰서 입학하게 되었다. 대학교에 입학해서 프로그래밍 언어 중 씨언어라는 것을 처음 배우게 되었다. 나는 고등학교 때 공부를 열심히 하지 않았지만 내가 좋아하는 수학만큼은 열심히 하여 대학도 수학성적으로 입학할 수 있었다. 씨언어는 수학과 되게 비슷한점이 많았다. 씨언어의 문법을 배우는 과정은 수학의 어떠한 개념에서 증명과정과 공식을 배우는 과정과 비..
Deque(덱/데크) 덱은 Double-Ended Queue의 줄임말로 큐의 양쪽에 데이터를 넣고 뺄 수 있는 형태의 자료구조를 의미한다. 하나의 자료구조에 큐(Queue)와 스택(Stack)을 합쳐 놓은 형태라고 생각하면 된다. 이 중에 한쪽으로만 입력이 가능하도록 설정한 덱을 스크롤(Scroll)이라고 하며, 한쪽으로만 출력할 수 있드록 설정한 덱을 셀프(Shelf)라고 한다. Deque 생성 Deque deque1 = new ArrayDeque(); Deque deque2 = new LinkedBlockingDeque(); Deque deque3 = new ConcurrentLinkedDeque(); Deque deque4 = new LinkedList(); Deque 주요 함수 deque1.add..
해당 포스터에서 큐에 대한 개념은 정리하지 않는다. 하지만 코테준비를 위해 큐를 직접 구현한 코드(배열, 리스트)와 라이브러리를 활용 한 큐 자료구조 사용방법에 대해 정리하려고 한다. 코테에서는 큐를 직접 구현하는 것보단 큐를 활용한 응용문제들이 많이 나오는 것 같다. 1. 배열을 이용한 구현 public class Queue_Array { int MAX = 1000; int front; //머리 쪽에 위치할 index값, pop할때 참조하는 index int rear; //꼬리 쪽에 위치할 index값, push할때 참조하는 index int [] queue; public Queue_Array() { front = rear = 0; //초기값 0 queue = new int[MAX]; //배열 생성 }..
해당 포스터에서 스택에 대한 개념은 정리하지 않는다. 하지만 코테준비를 위해 스택을 직접 구현한 코드(배열, 리스트)와 라이브러리를 활용 한 스택 자료구조 사용방법에 대해 정리하려고 한다. 코테에서는 스택을 직접 구현하는 것보단 스택을 활용한 응용문제들이 많이 나오는 것 같다. 1. 배열로 직접 구현 배열로 직접 구현하는 경우는 배열의 크기가 정해진 상황에서는 쉽게 구현할 수 있지만, 크기가 정해지지 않는 상태에서는 배열은 실행 중 크기를 동적으로 바꿀 수 없기 때문에 각 상황에 맞게 배열을 다시 생성해서 값들을 옮겨주는 귀찮은 작업을 해야한다.(해당 코드에서는 이 작업이 적용되어있지 않다.) public class Stack_Array { int top; int [] stack; int size; pu..
2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생..
List의 값 중 최대값, 최소값을 구하기 위해서, 다음 메소드를 사용할 수 있습니다. Collections.max(list) Collections.min(list) public static void main(String[] args) { // ArrayList 준비 ArrayList list = new ArrayList(Arrays.asList(0, 3, 2, 1, 5)); System.out.println(list); // [0, 3, 2, 1, 5] // Max int max = Collections.max(list); System.out.println(max); // 5 // Min int min = Collections.min(list); System.out.println(min); // 0 }..
2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후..
브루트포스 알고리즘 문제에서 순열과 조합문제가 자주 등장해서 자바로 구현한 것을 코드로 정리해 놓으려고 한다. 순열과 조합을 구현하는 방법은 백트래킹 개념을 이용하여 크게 2가지가 있는데, 첫번째는 Swap을 이용한 방법과, Visited배열을 이용한 2가지 방법이 있다. 나는 visited배열을 이용한 구현이 더 편리해서 visited배열을 이용한 백트래킹으로 4가지(순열, 중복순열, 조합, 중복조합)경우를 정리하려고 한다. visited배열은 중복처리를 체크할 목적으로 사용되며 중복을 허용할 경우 필요없게 된다. Swap과 Visited 방법 중 어느 방법이 성능적으로 더 효율적인지는 체크해보지 않았다. 문제를 풀다가 Swap방법이 꼭 필요한 경우가 있다면 그때 따로 정리하려고 한다. (성능은 비슷하..
4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 +..
1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 문제 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. 출력 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다. 예제입출력 풀이 이번 문제는 문제는 어렵지 않았는데, 문제 자체를 ..
코딩테스트에서 하나의 정수 n이 주어지면 각 자릿수의 정수별로 무언가를 처리해야할 때가 있다. 예시) 정수 1234 -> 1, 2, 3, 4 int n = 1234; int a = 1; int b = 2; int c = 3; int d = 4; 이전의 내가 사용했던 방법은 아래와 같다. int n = 1234; Strint[] str = String.valueof(n).split(""); int[] box = new int[str.length] for(int i=0; i
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.*; public class Main { static List graph = new LinkedList(); static boolean[] visited; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); B..
1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 문제 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. 한 배추의 상하좌..
2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 문제 신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다. 예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨..
2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로..
2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 문제 신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다. 예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨..