Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 개념
- 기초100제
- SQLD / SQLP
- java
- Python 3
- JAVA 11
- 기본
- 헤드퍼스트 디자인패턴
- 응용
- Python
- SELECT 절
- pypy3
- 파이썬
- 이론
- baekjoon
- 공공데이터
- Codeup
- 기초
- 코딩테스트
- GROUP BY 절
- Codeforces Round #802 (Div. 2)
- 단계별로 풀어보기
- HAVING 절
- Java11
- 백준
- 자바
- programmers
- BOJ
- 명품 자바 프로그래밍
- level1
Archives
- Today
- Total
Development Project
[ Baekjoon - 10/14 ] - 3980번: 선발 명단 본문
- 소요 시간 : 50분
- 문제를 읽고 이해하기
- 제한
- 시간 : 1초
- 메모리 : 128MB
- 문제
- 11명의 선수가 11개의 포지션에 배치될때, 모두의 능력을 잘 발휘하여 모든 선수의 총 능력치 합의 최대를 출력하는 문제
- 이해
- 문제가 간단해서 이해가 어렵진 않았다.
- 제한
- 문제를 익숙한 용어로 재정의와 추상화
- 이해가 어렵지 않아서 생략했다.
- 문제를 어떻게 해결할 것인가
- 백트래킹을 사용해야 할것같아서 조건을 따지기 위해 그려보았다.
- 연결되었고, 갈수있는 노드(선수)로 루트에서부터 그려보았는데,
각 노드는 능력치가 0이 아니고, 부모에서 방문하지 않은 선수이다. - 이를 조건으로 DFS를 진행하면 될것같았다
- 위 계획을 검증
- 문제 자체는 조건만 잘 지키면 되는 완탐이라 크게 다루진 않겠다.
- 계획 수행 (실제코드 작성)
- Java 11
-
import java.io.*; import java.util.*; public class Main { static int T,ans; static int[][] map; static boolean[] vis; public static void main(String[] args) throws IOException { //System.setIn(new FileInputStream("src/input.txt")); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); T = Integer.parseInt(br.readLine()); while (T-->0){ map=new int[11][11]; vis=new boolean[11]; ans=Integer.MIN_VALUE; for(int i=0; i<11; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for(int j=0; j<11; j++) { map[i][j]=Integer.parseInt(st.nextToken()); } } solve(0, 0); System.out.println(ans); } } private static void solve(int playerNo, int total) { if(playerNo==11) { ans = Math.max(total, ans); return; } for(int i=0; i<11; i++) { if(map[playerNo][i]==0 || vis[i]) continue; vis[i]=true; solve(playerNo+1, total+map[playerNo][i]); vis[i]=false; } } }
-
- Python 3
-
import sys input = sys.stdin.readline def DFS(num, total): global ans, vis if num == 11: ans = max(ans, total) return for x in range(11): if vis[x] or abilityMap[num][x] == 0: continue total += abilityMap[num][x] vis[x] = True DFS(num+1, total) total -= abilityMap[num][x] vis[x] = False test_case = int(input()) for _ in range(test_case): abilityMap = [list(map(int, input().split())) for _ in range(11)] vis = [False] * 11 ans = 0 DFS(0, 0) print(ans)
-
- Java 11
- 결과
틀렸던 이유는.. 자바를 그대로 파이썬 코드로 변환한뒤 실행한번 안하고 제출했다가 생긴 오류이다.. 테케만큼 반복해야하는데 왜 안넣었지..ㅋㅋ
런타임에러도 실행안해서 생긴 오류인데 함수명을 다르게했다가(solve와 DFS) 생긴 오류..
확실히 어려운 문제면 틀리지않으려고 계속 고민하다가 제출하는데.. 쉬운문제일수록 바로 제출해버려서 틀리는것같다. 고쳐야지
'CodingTest > Baekjoon' 카테고리의 다른 글
[ Baekjoon - 10/17 ] - 2457번: 공주님의 정원 (0) | 2022.10.20 |
---|---|
[ Baekjoon - 10/15 ] - 20365번: 블로그2 (0) | 2022.10.16 |
[ Baekjoon - 10/13 ] - 20061번: 모노미노도미노2 (0) | 2022.10.14 |
[ Baekjoon - 10/12 ] - 21610번: 마법사 상어와 비바라기 (0) | 2022.10.12 |
[ Baekjoon - 10/11 ] - 1647번: 도시 분할 계획 (0) | 2022.10.12 |
Comments