ANIMAL_INS 테이블에서 중성화를 안한 동물이 ANIMAL_OUTS 테이블에서 중성화 된 경우를 출력한다.
ANIMAL_ID를 키로 LEFT JOIN하여 풀었다.
- ORACLE
SELECT A1.ANIMAL_ID, A1.ANIMAL_TYPE, A1.NAME
FROM ANIMAL_INS A1 LEFTJOIN ANIMAL_OUTS A2
ON A1.ANIMAL_ID = A2.ANIMAL_ID
WHERE A1.SEX_UPON_INTAKE LIKE'Intact%'AND A2.SEX_UPON_OUTCOME IN ('Spayed Female','Neutered Male')
ORDERBY ANIMAL_ID
;
- MySQL
SELECT i.ANIMAL_ID, i.ANIMAL_TYPE,i.NAME
FROM ANIMAL_INS i, ANIMAL_OUTS o
WHERE i.ANIMAL_ID=o.ANIMAL_ID
AND i.SEX_UPON_INTAKE LIKE'Intact%'AND (o.SEX_UPON_OUTCOME LIKE'Spayed%'OR o.SEX_UPON_OUTCOME LIKE'Neutered%')
ORDERBY ANIMAL_ID
;
가지고있는 k개의 랜선을 잘라 같은 길이로 n개를 만들 수 있는 최대 길이를 출력하는 문제이다.
풀이
k, n = map(int, input().split())
lan = []
for i inrange(k):
lan.append(int(input()))
lan.sort() # 이분탐색을 위해 정렬
s = 1
e = max(lan)
res = 0while s <= e:
total = 0
mid = (s + e) // 2for x in lan:
if x >= mid: total += (x // mid)
if total < n:
e = mid - 1else:
res = mid
s = mid + 1print(res)
방번호에 필요한 세트 수 를 출력하면 된다. 한 세트는 0~9의 숫자이고 6, 9는 서로 뒤집어 사용할 수 있다.
풀이
import collections
n=input()
d=collections.defaultdict(int)
for x in n:
x=int(x)
if x!=6and x!=9: d[x]+=1else:
if d[6]>d[9]:d[9]+=1else: d[6]+=1
res = list(d.values())
res.sort(reverse=True)
print(res[0])
default 딕셔너리를 사용해 구현하였다.
6, 9 가 아닌 경우는 세트 값을 추가하고 6 혹은 9일 경우엔 적은 수를 더해가며 세트를 추가했다.
dx = [1,0,-1,0]
dy = [0,1,0,-1]
cnt=0defdfs(x,y):global cnt
v[x][y]=1
cnt+=1#집 countfor i inrange(4):
nx = x+dx[i]
ny = y+dy[i]
if(0<=nx<n and0<=ny<n and v[nx][ny]==0and arr[nx][ny]==1):
dfs(nx,ny)
if __name__ == '__main__':
n = int(input())
v = [[0]*n for _ inrange(n)]
arr = []
dan = [] #단지수for _ inrange(n):
arr.append(list(map(int,input())))
for i inrange(n):
for j inrange(n):
if arr[i][j]==1and v[i][j]==0:
dfs(i,j)
dan.append(cnt)
cnt=0
dan.sort()
print(len(dan)) #단지 수iflen(dan)==0:print(0)
for d in dan:print(d) #집 수
풀이2 (C++)
#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<algorithm>usingnamespace std;
int N, M, A[25][25], visit[25][25],ny,nx;
int dan_cnt =1, cnt = 1;
int dx[] = { 0,0,1,-1 }, dy[] = { 1,-1,0,0 };
vector<int>dan;
vector<pair<int, int>>pos;
queue<pair<int, int>>q;
voidBFS(int y, int x, int dan_cnt){
q.push({ y,x });
visit[y][x] = dan_cnt;
cnt = 1;
while (!q.empty()) {
int cy = q.front().first;
int cx = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int ny = cy + dy[i];
int nx = cx + dx[i];
if (A[ny][nx]!=1||visit[ny][nx] !=0|| ny < 0 || nx < 0 || ny >= N || nx >= N)continue;
visit[ny][nx] = dan_cnt;
q.push({ ny,nx });
cnt++;
}
}
}
intmain(){//플러드필,연결요소/*ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);*///memset(visit, -1, sizeof(visit));scanf("%d", &N);
for (int y = 0; y < N; y++) {
for (int x = 0; x < N; x++) {
scanf("%1d", &A[y][x]);
if (A[y][x] == 1) pos.push_back({ y,x });
}
}
for (int i = 0; i < pos.size(); i++) {
int y = pos[i].first;
int x = pos[i].second;
if (visit[y][x] == 0) { BFS(y, x, dan_cnt++); dan.push_back(cnt); }
}
sort(dan.begin(),dan.end());
printf("%d\n", dan_cnt-1);
for (int i = 0; i < dan.size(); i++) {
printf("%d\n", dan[i]);
}
return0;
}