[[TableOfContents]] === 문제 === * [https://www.acmicpc.net/problem/2309 일곱 난쟁이] * [https://www.acmicpc.net/problem/2667 단지번호붙이기] * [https://www.acmicpc.net/problem/1912 연속합] * [https://www.acmicpc.net/problem/7983 내일 할거야] * [https://www.acmicpc.net/problem/1120 문자열] === 해설 === 백준 그룹 내에 있던 해설인데 뒤늦게 위키에도 올려봅니다. ==== 일곱 난쟁이 ==== 'Brute Force 브루트 포스'를 사용합시다. 이중 for문으로 난쟁이 2명을 선택하는 과정을 반복합니다. "9난쟁이 키의 합 - (2난쟁이 키의 합) = 100" 이 되면, 반복문을 나와 그 난쟁이들을 제외하고 '오름차순 정렬' 을 한 뒤 출력합니다. {{{ x=[] for i in range(9): x.append(int(input())) x.sort() keySum=sum(x) for i in range(8): for j in range(i+1,9): if keySum-x[i]-x[j]==100: for k in range(9): if k!=i and k!=j: print(x[k]) exit() }}} ==== 단지번호붙이기 ==== 'BFS'를 사용합시다. 어떤 좌표에서 위, 아래, 오른쪽, 왼쪽으로 나아갈 수 있는데 {{{arr[i][j] == 1 && visited[i][j] = false}}} (배열의 해당 위치에 집이 존재하고 방문하지 않은 곳) 이면, C++ 기준으로 {{{queue>}}} 로 선언된 큐에 push를 해줍니다. 이 작업을 큐가 빌 때까지 반복하는데 큐의 front를 이용해서 가능한 곳에 모두 접근할 수 있도록 합시다. 이 과정에서 큐에 push하거나 pop하는 경우 cnt를 늘려주면, 세대 수를 셀 수 있어요. 그럼 끝~ 마지막에 단지 별 세대수를 출력할 때는 꼭 '오름차순 정렬'을 적용해주세요! (이것때문에 고생많이 했어요ㅜ) {{{ from collections import deque def BFS(si,sj): global N,X,visit Q=deque() Q.append((si,sj)) visit[si][sj]=True cnt=1 while Q: i,j=Q.popleft() if i>0 and X[i-1][j] and not visit[i-1][j]: Q.append((i-1,j)) visit[i-1][j]=True cnt+=1 if i0 and X[i][j-1] and not visit[i][j-1]: Q.append((i,j-1)) visit[i][j-1]=True cnt+=1 if j