├── README.md └── src ├── 10장 ├── 10-4.c++ ├── 10-4.java ├── 10-4.py ├── 10-5-1.c++ ├── 10-5-1.java ├── 10-5-1.py ├── 10-5-2.c++ ├── 10-5-2.java └── 10-5-2.py ├── 11장 ├── 11-5.c++ ├── 11-5.java ├── 11-5.py ├── 11-6.c++ ├── 11-6.java └── 11-6.py ├── 12장 ├── 12-2.c++ ├── 12-2.java ├── 12-2.py ├── 12-3.c++ ├── 12-3.java ├── 12-3.py ├── 12-4.c++ ├── 12-4.java ├── 12-4.py ├── 12-5.c++ ├── 12-5.java ├── 12-5.py ├── 12-6.c++ ├── 12-6.java └── 12-6.py ├── 13장 ├── 13-1-1.c++ ├── 13-1-1.java ├── 13-1-1.py ├── 13-1-2.c++ ├── 13-1-2.java ├── 13-1-2.py ├── 13-1-3.c++ ├── 13-1-3.java ├── 13-1-3.py ├── 13-2-1.c++ ├── 13-2-1.java └── 13-2-1.py ├── 14장 ├── 14-2-1.c++ ├── 14-2-1.java ├── 14-2-1.py ├── 14-2-2.c++ ├── 14-2-2.java ├── 14-2-2.py ├── 14-2-3.c++ ├── 14-2-3.java ├── 14-2-3.py ├── 14-3-1.c++ ├── 14-3-1.java ├── 14-3-1.py ├── 14-3-2.c++ ├── 14-3-2.java ├── 14-3-2.py ├── 14-3-3.c++ ├── 14-3-3.java └── 14-3-3.py ├── 15장 ├── 15-2-2.c++ ├── 15-2-2.java ├── 15-2-2.py ├── 15-2-3.c++ ├── 15-2-3.java ├── 15-2-3.py ├── 15-2-4.c++ ├── 15-2-4.java ├── 15-2-4.py ├── 15-3-2.c++ ├── 15-3-2.java ├── 15-3-2.py ├── 15-3-3.c++ ├── 15-3-3.java └── 15-3-3.py ├── 16장 ├── 16-2-1.c++ ├── 16-2-1.java ├── 16-2-1.py ├── 16-2-2.c++ ├── 16-2-2.java ├── 16-2-2.py ├── 16-2-3.c++ ├── 16-2-3.java ├── 16-2-3.py ├── 16-4-1.c++ ├── 16-4-1.java ├── 16-4-1.py ├── 16-4.c++ ├── 16-4.java ├── 16-4.py ├── 16-5.c++ ├── 16-5.java └── 16-5.py ├── 17장 ├── 17-2.c++ ├── 17-2.java ├── 17-2.py ├── 17-3.c++ ├── 17-3.java ├── 17-3.py ├── 17-4.c++ ├── 17-4.java └── 17-4.py ├── 18장 ├── 18-4-1.c++ ├── 18-4-1.java ├── 18-4-1.py ├── 18-4-2.c++ ├── 18-4-2.java ├── 18-4-2.py ├── 18-5.c++ ├── 18-5.java ├── 18-5.py ├── 18-6.c++ ├── 18-6.java ├── 18-6.py ├── 18-7.c++ ├── 18-7.java └── 18-7.py ├── 19장 ├── 19-2.c++ ├── 19-2.java ├── 19-2.py ├── 19-3.c++ ├── 19-3.java ├── 19-3.py ├── 19-4.c++ ├── 19-4.java ├── 19-4.py ├── 19-5.c++ ├── 19-5.java └── 19-5.py ├── 20장 ├── 20-2.c++ ├── 20-2.java ├── 20-2.py ├── 20-3.c++ ├── 20-3.java ├── 20-3.py ├── 20-4.c++ ├── 20-4.java ├── 20-4.py ├── 20-5.c++ ├── 20-5.java └── 20-5.py ├── 3장 ├── 3-2.c++ ├── 3-2.java └── 3-2.py ├── 4장 ├── 4-3.c++ ├── 4-3.java └── 4-3.py ├── 5장 ├── 5-1-1.c++ ├── 5-1-1.java ├── 5-1-1.py ├── 5-1-2.c++ ├── 5-1-2.java ├── 5-1-2.py ├── 5-2.c++ ├── 5-2.java ├── 5-2.py ├── 5-3-1.c++ ├── 5-3-1.java ├── 5-3-1.py ├── 5-3-2.c++ ├── 5-3-2.java ├── 5-3-2.py ├── 5-3-3.c++ ├── 5-3-3.java ├── 5-3-3.py ├── 5-4.c++ ├── 5-4.java └── 5-4.py ├── 6장 ├── 6-1-1.c++ ├── 6-1-1.java ├── 6-1-1.py ├── 6-1-2.c++ ├── 6-1-2.java └── 6-1-2.py ├── 7장 ├── 7-4.c++ ├── 7-4.java ├── 7-4.py ├── 7-5.c++ ├── 7-5.java ├── 7-5.py ├── 7-6.c++ ├── 7-6.java └── 7-6.py ├── 8장 ├── 8-2.c++ ├── 8-2.java ├── 8-2.py ├── 8-3.c++ ├── 8-3.java ├── 8-3.py ├── 8-4.c++ ├── 8-4.java └── 8-4.py ├── 9장 ├── 9-3.c++ ├── 9-3.java ├── 9-3.py ├── 9-4-1.c++ ├── 9-4-1.java └── 9-4-1.py └── 부록B ├── A.c++ ├── B.C++ └── C.c++ /README.md: -------------------------------------------------------------------------------- 1 | # Algorithm-code-for-coding-test 2 | * * * 3 | 4 | ### 보통의 취준생을 위한 코딩테스트 with 파이썬 (c++,java,python) 5 | 6 | 안녕하세요. 보통의 취준생을 위한 코딩테스트 with 파이썬 저자 권국원 입니다. 7 | 해당책에서 나오는 코드들은 github에 올려두었으며, 다운로드하여 쉽게 이용할수 있도록 8 | 해두었습니다. 9 | 10 | 사용 방법 11 | ----------- 12 | src 폴더안에 3장부터 20장까지의 코드(c++,java,python)가 들어있습니다. 13 | ![스크린샷(520)_LI](https://user-images.githubusercontent.com/49832278/149806823-33ade2d0-fd34-47af-9fdc-31a1197ba3e1.jpg) 14 | 15 | 16 | 각장에는 .c++, .java .py 확장자 파일이 들어있습니다. 17 | 18 | 19 | 3-2장의 문제를 예로들어 사용하실때는 20 | c++ 사용자라면 3-2.c++ 파일을, 21 | java 사용자라면 3-2.java 파일을, 22 | python 사용자라면 3-2.py 파일을 사용하시면 됩니다. 23 | 24 | 파일 다운로드 방법 25 | ----------- 26 | 깃허브 사용자라면 아래 명령어를 통해 파일을 다운로드 하실수있으며, 27 | ```bash 28 | git clone https://github.com/rnjsrnrdnjs/Algorithm-code-for-coding-test 29 | ``` 30 | 깃허브 사용자가 아니라면 31 | 32 | 33 | ![스크린샷(521)_LI](https://user-images.githubusercontent.com/49832278/149806833-a0dd889a-c66a-4478-b87b-cd1a5ce3d930.jpg) 34 | 35 | 코드 ZIP파일을 다운로드 하여 사용하실수 있습니다. 36 | 37 | ###### 오타 혹은 코드 에러 발견시 090tree@gmail.com 으로 연락 바랍니다. 38 | 39 | ![다운로드](https://user-images.githubusercontent.com/49832278/154022751-b82bfff7-777a-4cf9-b1d8-1ef162c320f3.jpg) 40 | 41 | -------------------------------------------------------------------------------- /src/10장/10-4.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int t; cin >> t; 57 | while (t--) { 58 | map mp; 59 | int n; cin >> n; 60 | for (int i = 0; i < n; i++) { 61 | string a, b; cin >> a >> b; 62 | mp[b]++; 63 | } 64 | int result = 1; 65 | for (auto it = mp.begin(); it != mp.end(); it++) { 66 | result *= it->second + 1; 67 | } 68 | cout << result - 1 << endl; 69 | 70 | } 71 | } 72 | 73 | int main() { 74 | cin.tie(0), ios_base::sync_with_stdio(false); 75 | solve(); 76 | return 0; 77 | } -------------------------------------------------------------------------------- /src/10장/10-4.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws NumberFormatException, IOException { 6 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 7 | int T = Integer.parseInt(br.readLine()); 8 | while(T-->0){ 9 | HashMap map = new HashMap<>(); 10 | int n = Integer.parseInt(br.readLine()); 11 | for (int j = 0; j < n; j++) { 12 | String b = br.readLine().split(" ")[1]; 13 | if (map.containsKey(b)) { 14 | map.put(b, map.get(b) + 1); 15 | } else { 16 | map.put(b, 1); 17 | } 18 | } 19 | int answer = 1; 20 | for (int y : map.values()) { 21 | answer *= y + 1; 22 | } 23 | System.out.println(answer - 1); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /src/10장/10-4.py: -------------------------------------------------------------------------------- 1 | testcase = int(input()) 2 | 3 | for i in range(testcase): 4 | map = {} 5 | answer = 1 6 | n = int(input()) 7 | for j in range(n): 8 | a, b = input().split() 9 | if not b in map: 10 | map[b] = 1 11 | else: 12 | map[b] += 1 13 | for k in map.keys(): 14 | answer = answer * (map[k]+1) 15 | print(answer-1) 16 | -------------------------------------------------------------------------------- /src/10장/10-5-1.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | i64 ps[200001]; 54 | 55 | // ........................main.......................... // 56 | void solve() { 57 | int n;cin>>n; 58 | vi64 a(n); 59 | map mp; 60 | for(int i=0;i>a[i]; 61 | int ans=0; 62 | MS(ps,0); 63 | for(int i=0;i map = new HashMap(); 14 | map.put((long)0, (long)1); 15 | for(int i=0;i 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int t,x;cin>>t>>x; 57 | map mp; 58 | int mex=0; 59 | while(t--){ 60 | int y;cin>>y; 61 | if(mp[y%x]){ 62 | mp[(y%x)+x*mp[y%x] ]++; 63 | } 64 | mp[y%x]++; 65 | while(mp[mex]){ 66 | mex++; 67 | } 68 | cout< 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | int arr[10]{0}; 54 | 55 | // ........................main.......................... // 56 | void solve() 57 | { 58 | priority_queue< int, vector, less > pqx; 59 | //priority_queue< int, vector, greater > pqn; 60 | int N;cin>>N; 61 | for(int i=0;i>a; 63 | if(a==0){ 64 | if(pqx.empty()){ 65 | cout<<0< heap = new PriorityQueue<>(Collections.reverseOrder()); 10 | for (int i = 0; i < N; i++) { 11 | int num = Integer.parseInt(br.readLine()); 12 | if (num == 0) { 13 | if (heap.isEmpty()) 14 | System.out.println(0); 15 | else 16 | System.out.println(heap.poll()); 17 | } else { 18 | heap.add(num); 19 | } 20 | } 21 | br.close(); 22 | } 23 | } -------------------------------------------------------------------------------- /src/11장/11-5.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import heapq 3 | 4 | n = int(input()) 5 | heap = [] 6 | 7 | for _ in range(n): 8 | num = int(sys.stdin.readline()) 9 | if num != 0: 10 | heapq.heappush(heap, (-num)) 11 | else: 12 | try: 13 | print(-1 * heapq.heappop(heap)) 14 | except: 15 | print(0) 16 | -------------------------------------------------------------------------------- /src/11장/11-6.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n; cin >> n; 57 | priority_queue> pq; 58 | int sum = 0; 59 | for (int i = 1; i <= n; i++) { 60 | int tmp; cin >> tmp; 61 | pq.push(tmp); 62 | } 63 | while (pq.size()>1) { 64 | int a = pq.top(); pq.pop(); 65 | int b = pq.top(); pq.pop(); 66 | sum += a + b; 67 | pq.push(a+b); 68 | } 69 | cout << sum << endl; 70 | } 71 | 72 | int main() { 73 | cin.tie(0), ios_base::sync_with_stdio(false); 74 | solve(); 75 | return 0; 76 | } -------------------------------------------------------------------------------- /src/11장/11-6.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Scanner sc = new Scanner(System.in); 7 | int n = sc.nextInt(); 8 | PriorityQueue card = new PriorityQueue(); 9 | for (int i=0; i 1) { 13 | long first = card.poll(); 14 | long second = card.poll(); 15 | answer += first + second; 16 | card.add(first + second); 17 | } 18 | System.out.println(answer); 19 | } 20 | } -------------------------------------------------------------------------------- /src/11장/11-6.py: -------------------------------------------------------------------------------- 1 | import heapq 2 | N = int(input()) 3 | 4 | card = list(int(input()) for _ in range(N)) 5 | heapq.heapify(card) 6 | answer=0 7 | 8 | while len(card) != 1: 9 | first = heapq.heappop(card) 10 | second = heapq.heappop(card) 11 | sum = first + second 12 | answer += sum 13 | heapq.heappush(card,sum) 14 | 15 | print(answer) -------------------------------------------------------------------------------- /src/12장/12-2.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | string str; cin >> str; 57 | int sum = 0; 58 | string temp = ""; 59 | bool minus = false; 60 | for (int i = 0; i <= str.length(); i++) { 61 | if (str[i] == '+' || str[i] == '-' || str[i] == '\0') { 62 | if (minus) { 63 | sum -= stoi(temp); 64 | } 65 | else { 66 | sum += stoi(temp); 67 | } 68 | temp = ""; 69 | if (str[i] == '-') { 70 | minus = true; 71 | } 72 | continue; 73 | } 74 | temp += str[i]; 75 | } 76 | cout << sum << endl; 77 | } 78 | 79 | int main() { 80 | cin.tie(0), ios_base::sync_with_stdio(false); 81 | solve(); 82 | return 0; 83 | } -------------------------------------------------------------------------------- /src/12장/12-2.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Scanner sc = new Scanner(System.in); 7 | int answer = Integer.MAX_VALUE; 8 | String[] equtation = sc.nextLine().split("-"); 9 | for (int i = 0; i < equtation.length; i++) { 10 | int temp = 0; 11 | String[] num = equtation[i].split("\\+"); 12 | for (int j = 0; j < num.length; j++) { 13 | temp += Integer.parseInt(num[j]); 14 | } 15 | if (answer == Integer.MAX_VALUE) { 16 | answer = temp; 17 | } else { 18 | answer -= temp; 19 | } 20 | } 21 | System.out.println(answer); 22 | } 23 | } -------------------------------------------------------------------------------- /src/12장/12-2.py: -------------------------------------------------------------------------------- 1 | equtation =input().split('-') 2 | answer=0 3 | 4 | for i in equtation[0].split('+'): 5 | answer+=int(i) 6 | 7 | for i in equtation[1:]: 8 | for j in i.split('+'): 9 | answer-=int(j) 10 | 11 | print(answer) -------------------------------------------------------------------------------- /src/12장/12-3.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 7 | int N = Integer.parseInt(br.readLine()); 8 | int[][] meet = new int[N][2]; 9 | StringTokenizer st; 10 | for(int i = 0; i < N; i++) { 11 | st = new StringTokenizer(br.readLine(), " "); 12 | meet[i][0] = Integer.parseInt(st.nextToken()); 13 | meet[i][1] = Integer.parseInt(st.nextToken()); 14 | } 15 | Arrays.sort(meet, new Comparator() { 16 | @Override 17 | public int compare(int[] o1, int[] o2) { 18 | if(o1[1] == o2[1]) { 19 | return o1[0] - o2[0]; 20 | } 21 | return o1[1] - o2[1]; 22 | } 23 | }); 24 | int answer = 0; 25 | int endTime = 0; 26 | for(int i = 0; i < N; i++) { 27 | if(endTime <= meet[i][0]) { 28 | endTime = meet[i][1]; 29 | answer++; 30 | } 31 | } 32 | System.out.println(answer); 33 | br.close(); 34 | } 35 | } -------------------------------------------------------------------------------- /src/12장/12-3.py: -------------------------------------------------------------------------------- 1 | N = int(input()) 2 | meet = [] 3 | 4 | for i in range(N): 5 | A, B = map(int, input().split()) 6 | meet.append([A, B]) 7 | 8 | meet.sort(key=lambda x: (x[1], x[0])) 9 | 10 | answer = 0 11 | endTime = 0 12 | for i in range(len(meet)): 13 | if endTime <= meet[i][0]: 14 | endTime = meet[i][1] 15 | answer += 1 16 | 17 | print(answer) 18 | -------------------------------------------------------------------------------- /src/12장/12-4.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | import java.util.ArrayList; 5 | import java.util.StringTokenizer; 6 | 7 | public class Main { 8 | public static void main(String[] args) throws IOException { 9 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 10 | int n = Integer.parseInt(br.readLine()); 11 | ArrayList arr = new ArrayList<>(); 12 | StringTokenizer st = new StringTokenizer(br.readLine()); 13 | for (int i = 0; i < n; i++) { 14 | arr.add(Integer.parseInt(st.nextToken())); 15 | } 16 | int s = Integer.parseInt(br.readLine()); 17 | 18 | while (true) { 19 | boolean tof = false; 20 | for (int i = 0; i < n - 1; i++) { 21 | int idx = i; 22 | int cmp=0; 23 | for (int j = n - 1; j >= i + 1; j--) { 24 | if (arr.get(idx) < arr.get(j) ) { 25 | if (j - i <= s) { 26 | idx = j; 27 | tof = true; 28 | cmp = j - i; 29 | } 30 | } 31 | } 32 | if (idx != i) { 33 | int tmp = arr.get(idx); 34 | arr.remove(idx); 35 | arr.add(i, tmp); 36 | s -= cmp; 37 | break; 38 | } 39 | } 40 | if (!tof) 41 | break; 42 | } 43 | StringBuilder sb = new StringBuilder(); 44 | for (int i : arr) { 45 | sb.append(i).append(' '); 46 | } 47 | System.out.println(sb); 48 | br.close(); 49 | } 50 | } -------------------------------------------------------------------------------- /src/12장/12-4.py: -------------------------------------------------------------------------------- 1 | N = int(input()) 2 | arr = [int(i) for i in input().split()] 3 | 4 | s=int(input()) 5 | while True: 6 | tof=False 7 | for i in range(N): 8 | idx=i 9 | cmp=0 10 | for j in range(N-1,i,-1): 11 | if arr[idx]=1;j--){ 27 | if(cb[j]!=0){ 28 | tof=true; 29 | ans+=2; 30 | ca[i]--; 31 | cb[j]--; 32 | break; 33 | } 34 | } 35 | if(!tof)break; 36 | } 37 | } 38 | for(int i=1;i<=1000;i++){ 39 | while(ca[i]!=0 && cb[i]!=0){ 40 | ans++; 41 | ca[i]--;cb[i]--; 42 | } 43 | } 44 | System.out.println(ans); 45 | } 46 | } -------------------------------------------------------------------------------- /src/12장/12-6.py: -------------------------------------------------------------------------------- 1 | N = int(input()) 2 | csortA = [0 for i in range(1002)] 3 | csortB = [0 for i in range(1002)] 4 | 5 | teamA = [int(x) for x in input().split()] 6 | for i in range(N): 7 | csortA[teamA[i]]+=1 8 | teamB = [int(x) for x in input().split()] 9 | for i in range(N): 10 | csortB[teamB[i]]+=1 11 | 12 | 13 | answer=0 14 | 15 | for i in range(1,1001): 16 | while csortA[i]: 17 | tof=False 18 | for j in range(i-1,0,-1): 19 | if csortB[j]: 20 | tof=True 21 | answer+=2 22 | csortA[i]-=1 23 | csortB[j]-=1 24 | break 25 | if tof==False: 26 | break 27 | 28 | for i in range(1,1001): 29 | while csortA[i] and csortB[i]: 30 | answer+=1 31 | csortA[i]-=1 32 | csortB[i]-=1 33 | 34 | print(answer) 35 | 36 | -------------------------------------------------------------------------------- /src/13장/13-1-1.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n;cin>>n; 57 | int fac=1; 58 | for(int i=1;i<=n;i++){ 59 | fac*=i; 60 | } 61 | cout<1): return n * factorial(n-1) 3 | else: 4 | return 1 5 | N=int(input()) 6 | print(factorial(N)) -------------------------------------------------------------------------------- /src/13장/13-1-2.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | void hanoi(int n, int start, int to, int end) 55 | { 56 | if(n == 1) 57 | cout<>num; 68 | cout<< (1< 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | int tb[17][17]{0,}; 54 | int ans=0; 55 | int n; 56 | void bf(int y,int x,int s){ 57 | if(y==n && x==n)ans++; 58 | if(y>n || x>n)return ; 59 | if(!tb[y][x+1] && (s==0 || s==2) ){ 60 | bf(y,x+1,0); 61 | } 62 | if(!tb[y+1][x] && (s==1 || s==2)){ 63 | bf(y+1,x,1); 64 | } 65 | if(!tb[y+1][x] && !tb[y+1][x+1] && !tb[y][x+1] ){ 66 | bf(y+1,x+1,2); 67 | } 68 | } 69 | 70 | // ........................main.......................... // 71 | void solve() { 72 | cin>>n; 73 | for(int i=1;i<=n;i++){ 74 | for(int j=1;j<=n;j++)cin>>tb[i][j]; 75 | } 76 | bf(1,2,0); 77 | cout< n or x > n: 4 | return 5 | if y == n and x == n: 6 | ans += 1 7 | if home[y][x+1] == 0 and (shape == 0 or shape == 2): 8 | recursive(y, x+1, 0) 9 | if home[y+1][x] == 0 and (shape == 1 or shape == 2): 10 | recursive(y+1, x, 1) 11 | if home[y+1][x] == 0 and home[y][x+1] == 0 and home[y+1][x+1] == 0: 12 | recursive(y+1, x+1, 2) 13 | 14 | n = int(input()) 15 | home = [[0 for col in range(18)] for row in range(18)] 16 | for i in range(1, n+1): 17 | row = list(map(int, input().split())) 18 | for j in range(1, n+1): 19 | home[i][j] = row[j-1] 20 | 21 | ans = 0 22 | recursive(1, 2, 0) 23 | print(ans) 24 | -------------------------------------------------------------------------------- /src/13장/13-2-1.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | public class Main { 4 | static int[] cnt = new int[2]; 5 | static int[][] colorPaper; 6 | 7 | public static void main(String[] args) { 8 | Scanner sc = new Scanner(System.in); 9 | int N = sc.nextInt(); 10 | 11 | colorPaper = new int[N][N]; 12 | for (int i = 0; i < N; i++) 13 | for (int j = 0; j < N; j++) 14 | colorPaper[i][j] = sc.nextInt(); 15 | 16 | divideAndConquer(N, 0, 0); 17 | for (int n : cnt) 18 | System.out.println(n); 19 | } 20 | 21 | static void divideAndConquer(int n, int y, int x) { 22 | for (int i = y; i < y + n; i++) { 23 | for (int j = x; j < x + n; j++) 24 | if (colorPaper[i][j] != colorPaper[y][x]) { 25 | divideAndConquer(n / 2, y, x); 26 | divideAndConquer(n / 2, y + n / 2, x); 27 | divideAndConquer(n / 2, y, x + n / 2); 28 | divideAndConquer(n / 2, y + n / 2, x + n / 2); 29 | return; 30 | } 31 | } 32 | cnt[colorPaper[y][x]]++; 33 | } 34 | } -------------------------------------------------------------------------------- /src/13장/13-2-1.py: -------------------------------------------------------------------------------- 1 | import sys 2 | n=int(sys.stdin.readline()) 3 | 4 | colorPaper=[list(map(int,sys.stdin.readline().split())) for _ in range(n)] 5 | 6 | white=0 7 | blue=0 8 | 9 | def divideAndConquer(x,y,n): 10 | global blue,white 11 | sameColor=colorPaper[x][y] 12 | for i in range(x,x+n): 13 | for j in range(y,y+n): 14 | if sameColor!=colorPaper[i][j]: 15 | divideAndConquer(x,y,n//2) 16 | divideAndConquer(x,y+n//2,n//2) 17 | divideAndConquer(x+n//2,y,n//2) 18 | divideAndConquer(x+n//2,y+n//2,n//2) 19 | return 20 | 21 | 22 | if sameColor==0: 23 | white+=1 24 | return 25 | else: 26 | blue+=1 27 | return 28 | 29 | divideAndConquer(0,0,n) 30 | print(white) 31 | print(blue) -------------------------------------------------------------------------------- /src/14장/14-2-1.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n;cin>>n; 57 | int count=0; 58 | for(int i=1;i<6660000;i++){ 59 | if(to_string(i).find("666")!=string::npos)count++; 60 | if(n==count){ 61 | cout<= 4) { 33 | answer = Math.max(answer, sum); 34 | return; 35 | } 36 | for (int k = 0; k < 4; k++) { 37 | int ny = y + dy[k]; 38 | int nx = x + dx[k]; 39 | if (ny < 0 || nx < 0 || ny >= N || nx >= M || visit[ny][nx]) { 40 | continue; 41 | } 42 | visit[ny][nx] = true; 43 | brute_force(ny, nx, cnt + 1, sum + paper[ny][nx], visit); 44 | visit[ny][nx] = false; 45 | } 46 | } 47 | 48 | static void check(int y, int x) { 49 | if (y < N - 2 && x < M - 1) 50 | answer = Math.max(answer, paper[y][x] + paper[y + 1][x] + paper[y + 2][x] + paper[y + 1][x + 1]); 51 | if (y < N - 2 && x > 0) 52 | answer = Math.max(answer, paper[y][x] + paper[y + 1][x] + paper[y + 2][x] + paper[y + 1][x - 1]); 53 | if (y < N - 1 && x < M - 2) 54 | answer = Math.max(answer, paper[y][x] + paper[y][x + 1] + paper[y][x + 2] + paper[y + 1][x + 1]); 55 | if (y > 0 && x < M - 2) 56 | answer = Math.max(answer, paper[y][x] + paper[y][x + 1] + paper[y][x + 2] + paper[y - 1][x + 1]); 57 | } 58 | 59 | } -------------------------------------------------------------------------------- /src/14장/14-2-3.py: -------------------------------------------------------------------------------- 1 | n, m = map(int, input().split()) 2 | paper = [[0 for col in range(511)] for row in range(511)] 3 | answer = 0 4 | figure = [ 5 | [[0, 0], [0, 1], [1, 0], [1, 1]], 6 | [[0, 0], [0, 1], [0, 2], [0, 3]], 7 | [[0, 0], [1, 0], [2, 0], [3, 0]], 8 | [[0, 0], [0, 1], [0, 2], [-1, 2]], 9 | [[0, 0], [1, 0], [2, 0], [2, 1]], 10 | [[0, 0], [1, 0], [0, 1], [0, 2]], 11 | [[0, 0], [0, 1], [1, 1], [2, 1]], 12 | [[0, 0], [0, 1], [-1, 1], [-1, 2]], 13 | [[0, 0], [1, 0], [1, 1], [2, 1]], 14 | [[0, 0], [0, 1], [0, 2], [-1, 1]], 15 | [[0, 0], [1, 0], [2, 0], [1, 1]], 16 | [[0, 0], [0, 1], [0, 2], [1, 1]], 17 | [[0, 0], [0, 1], [-1, 1], [1, 1]], 18 | [[0, 0], [0, 1], [1, 1], [1, 2]], 19 | [[0, 0], [1, 0], [1, -1], [2, -1]], 20 | [[0, 0], [1, 0], [1, 1], [1, 2]], 21 | [[0, 0], [0, 1], [1, 0], [2, 0]], 22 | [[0, 0], [0, 1], [0, 2], [1, 2]], 23 | [[0, 0], [1, 0], [2, 0], [2, -1]] 24 | ] 25 | 26 | for i in range(1, n+1): 27 | row = list(map(int, input().split())) 28 | for j in range(1, m+1): 29 | paper[i][j] = row[j-1] 30 | 31 | for i in range(1, 501): 32 | for j in range(1, 501): 33 | for k in range(0, 19): 34 | sum = 0 35 | for l in range(0, 4): 36 | y = i+figure[k][l][0] 37 | x = j+figure[k][l][1] 38 | if paper[y][x] == 0: 39 | sum = 0 40 | break 41 | sum += paper[y][x] 42 | answer = max(answer, sum) 43 | 44 | print(answer) 45 | -------------------------------------------------------------------------------- /src/14장/14-3-1.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | int num[9]; 54 | bool visit[9]{ 0, }; 55 | int n, m; 56 | 57 | void backT(int cnt) { 58 | if (cnt==m) { 59 | for (int i = 0; i < m; i++) { 60 | cout << num[i] << " "; 61 | }cout << endl; 62 | return; 63 | } 64 | else { 65 | for (int i = 1; i <= n; i++) { 66 | visit[i] = 1; 67 | num[cnt] = i; 68 | backT(cnt + 1); 69 | visit[i] = 0; 70 | } 71 | } 72 | } 73 | 74 | // ........................main.......................... // 75 | void solve() 76 | { 77 | cin >> n >> m; 78 | memset(visit, 0, sizeof(visit)); 79 | backT(0); 80 | 81 | } 82 | 83 | int main() { 84 | cin.tie(0), ios_base::sync_with_stdio(false); 85 | solve(); 86 | return 0; 87 | } -------------------------------------------------------------------------------- /src/14장/14-3-1.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static int[] answer; 6 | public static int N, M; 7 | public static StringBuilder sb = new StringBuilder(); 8 | 9 | public static void main(String[] args) { 10 | Scanner sc = new Scanner(System.in); 11 | N = sc.nextInt(); 12 | M = sc.nextInt(); 13 | answer = new int[M]; 14 | backTraking(0); 15 | System.out.print(sb); 16 | 17 | } 18 | 19 | public static void backTraking(int depth) { 20 | if (depth == M) { 21 | for (int i = 0; i < M; i++) { 22 | sb.append(answer[i] + " "); 23 | } 24 | sb.append('\n'); 25 | return; 26 | } 27 | for (int i = 1; i <= N; i++) { 28 | answer[depth] = i; 29 | backTraking(depth + 1); 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /src/14장/14-3-1.py: -------------------------------------------------------------------------------- 1 | n, m = map(int, input().split()) 2 | answer = [] 3 | 4 | def backTraking(depth): 5 | if depth == m: 6 | print(' '.join(map(str, answer))) 7 | return 8 | for i in range(1,n+1): 9 | answer.append(i) 10 | backTraking(depth+1) 11 | answer.pop() 12 | 13 | backTraking(0) -------------------------------------------------------------------------------- /src/14장/14-3-2.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | int num[9]; 54 | bool visit[9]{ 0, }; 55 | int n, m; 56 | 57 | void backT(int cnt) { 58 | if (cnt==m) { 59 | for (int i = 0; i < m; i++) { 60 | cout << num[i] << " "; 61 | }cout << endl; 62 | return; 63 | } 64 | else { 65 | for (int i = 1; i <= n; i++) { 66 | if (!visit[i] ) { 67 | visit[i] = 1; 68 | num[cnt] = i; 69 | backT(cnt + 1); 70 | visit[i] = 0; 71 | } 72 | } 73 | } 74 | } 75 | 76 | // ........................main.......................... // 77 | void solve() 78 | { 79 | cin >> n >> m; 80 | memset(visit, 0, sizeof(visit)); 81 | backT(0); 82 | 83 | } 84 | 85 | int main() { 86 | cin.tie(0), ios_base::sync_with_stdio(false); 87 | solve(); 88 | return 0; 89 | } -------------------------------------------------------------------------------- /src/14장/14-3-2.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static int[] answer; 6 | public static boolean[] visit; 7 | public static StringBuilder sb = new StringBuilder(); // 정적타입으로 해주어야한다. 8 | 9 | public static void main(String[] args) { 10 | Scanner sc = new Scanner(System.in); 11 | int N = sc.nextInt(); 12 | int M = sc.nextInt(); 13 | answer = new int[M]; 14 | visit = new boolean[N]; 15 | backTraking(N, M, 0); 16 | System.out.println(sb); 17 | } 18 | public static void backTraking(int N, int M, int depth) { 19 | if (depth == M) { 20 | for (int val : answer) { 21 | sb.append(val).append(' '); 22 | } 23 | sb.append('\n'); 24 | return; 25 | } 26 | for (int i = 0; i < N; i++) { 27 | if (!visit[i]) { 28 | visit[i] = true; 29 | answer[depth] = i + 1; 30 | backTraking(N, M, depth + 1); 31 | visit[i] = false; 32 | } 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/14장/14-3-2.py: -------------------------------------------------------------------------------- 1 | n, m = map(int, input().split()) 2 | answer = [] 3 | 4 | def backTraking(depth): 5 | if depth == m: 6 | print(' '.join(map(str, answer))) 7 | return 8 | for i in range(1,n+1): 9 | if i in answer: 10 | continue 11 | 12 | answer.append(i) 13 | backTraking(depth+1) 14 | answer.pop() 15 | 16 | backTraking(0) -------------------------------------------------------------------------------- /src/14장/14-3-3.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static int maxAns = Integer.MIN_VALUE; // 최댓값 6 | public static int minAns = Integer.MAX_VALUE; // 최솟값 7 | public static int[] operator = new int[4]; // 연산자 개수 8 | public static int[] numArr; // 숫자 9 | public static int N; // 숫자 개수 10 | 11 | public static void main(String[] args) { 12 | Scanner sc = new Scanner(System.in); 13 | N = sc.nextInt(); 14 | numArr = new int[N]; 15 | for (int i = 0; i < N; i++) { 16 | numArr[i] = sc.nextInt(); 17 | } 18 | for (int i = 0; i < 4; i++) { 19 | operator[i] = sc.nextInt(); 20 | } 21 | back_Traking(numArr[0], 1); 22 | System.out.println(maxAns); 23 | System.out.println(minAns); 24 | } 25 | 26 | public static void back_Traking(int num, int idx) { 27 | if (idx == N) { 28 | maxAns = Math.max(maxAns, num); 29 | minAns = Math.min(minAns, num); 30 | return; 31 | } 32 | for (int i = 0; i < 4; i++) { 33 | if (operator[i] > 0) { 34 | operator[i]--; 35 | if(i==0)back_Traking(num + numArr[idx], idx + 1); 36 | else if(i==1)back_Traking(num - numArr[idx], idx + 1); 37 | else if(i==2)back_Traking(num * numArr[idx], idx + 1); 38 | else if(i==3)back_Traking(num / numArr[idx], idx + 1); 39 | operator[i]++; 40 | } 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /src/14장/14-3-3.py: -------------------------------------------------------------------------------- 1 | def back_Traking(index,sum): 2 | global minAns 3 | global maxAns 4 | if index==N-1: 5 | if minAns > sum:minAns = sum 6 | if maxAns < sum:maxAns = sum 7 | return 8 | 9 | for i in range(4): 10 | temp = sum 11 | if operator[i]==0:continue 12 | if i==0:sum+=numArr[index+1] 13 | elif i==1:sum-=numArr[index+1] 14 | elif i==2:sum*=numArr[index+1] 15 | else: 16 | if sum<0:sum = abs(sum)//numArr[index+1]*-1 17 | else:sum //=numArr[index+1] 18 | 19 | operator[i] -= 1 20 | back_Traking(index+1,sum) 21 | operator[i] += 1 22 | sum = temp 23 | 24 | N = int(input()) 25 | numArr = list(map(int,input().split())) 26 | operator = list(map(int,input().split())) 27 | minAns = float('Inf') 28 | maxAns = float('-Inf') 29 | 30 | back_Traking(0,numArr[0]) 31 | print(maxAns) 32 | print(minAns) -------------------------------------------------------------------------------- /src/15장/15-2-2.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro 090.......................... // 4 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 5 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 6 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 7 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 8 | #define pb push_back 9 | #define pf push_front 10 | #define emb emplace_back 11 | #define fi first 12 | #define se second 13 | #define endl '\n' 14 | #define sz(A) (int)(A).size() 15 | #define ALL(A) A.begin(), A.end() 16 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) 17 | 18 | typedef pair ii; 19 | typedef pair iii; 20 | typedef vector vi; 21 | typedef vector vs; 22 | typedef vector vvi; 23 | typedef vector vii; 24 | typedef vector vvii; 25 | typedef long long i64; 26 | typedef unsigned long long ui64; 27 | inline int min(int x, int y) { return x > y ? y : x; } 28 | inline int max(int x, int y) { return x > y ? x : y; } 29 | // ......................function......................... // 30 | int N,M; 31 | int miro[101][101]{ -1 }; 32 | int inside[4][2] = { {-1,0},{0,-1},{1,0},{0,1} }; 33 | queue q; 34 | void bfs() { 35 | q.push(make_pair(0, 0)); 36 | ii current; 37 | 38 | while (!q.empty()) { 39 | current= q.front(); 40 | q.pop(); 41 | for (int i = 0; i < 4; i++) { 42 | int dx = current.first+ inside[i][0]; 43 | int dy = current.second + inside[i][1]; 44 | if (0 <= dx && dx < N && 0 <= dy && dy < M && miro[dx][dy] == 1) { 45 | q.push(make_pair(dx, dy)); 46 | miro[dx][dy] = miro[current.first][current.second] + 1; 47 | } 48 | } 49 | } 50 | } 51 | 52 | 53 | // ........................main.......................... // 54 | 55 | void solve() { 56 | cin >> N>>M; 57 | string str; 58 | for (int i = 0; i < N; i++) { 59 | cin >> str; 60 | for (int j = 0; j < M; j++) { 61 | if (str[j]=='0') { 62 | miro[i][j] =0; 63 | } 64 | else { 65 | miro[i][j] = 1; 66 | } 67 | } 68 | } 69 | bfs(); 70 | cout << miro[N - 1][M - 1]; 71 | } 72 | 73 | int main() { 74 | cin.tie(0), ios_base::sync_with_stdio(false); 75 | solve(); 76 | return 0; 77 | } 78 | -------------------------------------------------------------------------------- /src/15장/15-2-2.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | 6 | static int[][] maze; 7 | static int n; 8 | static int m; 9 | static boolean[][] visited; 10 | static int[] dx = { -1, 1, 0, 0 }; //x방향배열-상하 11 | static int[] dy = { 0, 0, -1, 1 }; //y방향배열-좌우 12 | 13 | public static void main(String[] args) throws IOException { 14 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 15 | StringTokenizer st = new StringTokenizer(br.readLine()); 16 | n = Integer.parseInt(st.nextToken()); 17 | m = Integer.parseInt(st.nextToken()); 18 | maze = new int[n][m]; 19 | for(int i=0; i q = new LinkedList<>(); 33 | q.add(new int[] {x,y}); 34 | while(!q.isEmpty()) { 35 | int now[] = q.poll(); 36 | int X = now[0]; 37 | int Y = now[1]; 38 | for(int i=0; i<4; i++) { 39 | int nX = X + dx[i]; 40 | int nY = Y + dy[i]; 41 | if(0<=nX && nX q = new LinkedList<>(); 29 | q.add(new Node(x, y, 1, 0)); 30 | visit[x][y][0] = true; 31 | visit[x][y][1] = true; 32 | while (!q.isEmpty()) { 33 | Node current = q.poll(); 34 | if (current.x == n - 1 && current.y == m - 1) return current.count; 35 | for (int i = 0; i < 4; i++) { 36 | int nx = current.x + dx[i]; 37 | int ny = current.y + dy[i]; 38 | if (nx >= 0 && nx < n && ny >= 0 && ny < m) { 39 | if(Map[nx][ny] == 0) { 40 | if (visit[nx][ny][current.wall] == false) { //현재까지 온 방법(벽을 부쉈는지 아닌지)으로 방문한 적이 없다면 방문한다. 41 | q.add(new Node(nx, ny, current.count + 1, current.wall)); 42 | visit[nx][ny][current.wall] = true; 43 | } 44 | } 45 | else if (Map[nx][ny] == 1) { 46 | if (current.wall == 0 && visit[nx][ny][1] == false) { //현재까지 벽을 부순적이 없고, 벽을 부숴서 방문한 적이 없다면 방문한다. 47 | q.add(new Node(nx, ny, current.count + 1, 1)); 48 | visit[nx][ny][1] = true; 49 | } 50 | } 51 | } 52 | } 53 | } 54 | 55 | return -1; 56 | } 57 | 58 | private static class Node { 59 | private int x; 60 | private int y; 61 | private int count; 62 | private int wall; 63 | 64 | public Node(int x, int y, int count, int wall) { 65 | this.x = x; 66 | this.y = y; 67 | this.count = count; 68 | this.wall = wall; 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/15장/15-2-3.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | dx= [0, -1, 0, 1] 4 | dy =[-1, 0, 1, 0] 5 | 6 | def bfs(): 7 | visit = [[[0]*2 for _ in range(M)] for _ in range(N)] 8 | visit[0][0][0] = 1 9 | while q: 10 | x, y, wall = q.popleft() 11 | if x==(N-1) and y==(M-1): return visit[x][y][wall] 12 | for i in range(4): 13 | if 0 <= x+dx[i] < N and 0 <= y+dy[i] < M and visit[x+dx[i]][y+dy[i]][wall] == 0: 14 | if Map[x+dx[i]][y+dy[i]]=='0': 15 | visit[x+dx[i]][y+dy[i]][wall] = visit[x][y][wall] + 1 16 | q.append([x+dx[i], y+dy[i], wall]) 17 | if wall == 0 and Map[x+dx[i]][y+dy[i]] == '1': 18 | visit[x+dx[i]][y+dy[i]][1] = visit[x][y][0] + 1 19 | q.append([x+dx[i], y+dy[i], 1]) 20 | 21 | return -1 22 | 23 | N, M = map(int, input().split()) 24 | Map = [list(input()) for _ in range(N)] 25 | q = deque() 26 | q.append([0, 0, 0]) 27 | print(bfs()) -------------------------------------------------------------------------------- /src/15장/15-2-4.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | visit=[[0 for col in range(10)] for row in range(10)] 4 | visit2=[[0 for col in range(10)] for row in range(10)] 5 | dx=[0,0,1,-1] 6 | dy=[1,-1,0,0] 7 | 8 | def bfs(): 9 | global answer 10 | 11 | for x in range(n): 12 | for y in range(m): 13 | visit[x][y]=lab[x][y] 14 | if(lab[x][y]==2): 15 | queue.append([x,y]) 16 | 17 | while(queue): 18 | x,y=queue.popleft() 19 | visit[x][y]=1 20 | for i in range(4): 21 | if 0<= x+dx[i] 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | int n, s; 55 | vi arr(21); 56 | int result = 0; 57 | void bf(int idx, int sum) { 58 | sum += arr[idx]; 59 | if (idx==n) { 60 | return; 61 | } 62 | if (sum==s) { 63 | result++; 64 | } 65 | bf(idx + 1, sum); 66 | bf(idx+1,sum-arr[idx]); 67 | } 68 | 69 | // ..........................main............................// 70 | void solve() { 71 | cin >> n >> s; 72 | for (int i = 0; i < n; i++) { 73 | cin >> arr[i]; 74 | } 75 | bf(0, 0); 76 | cout << result << endl; 77 | } 78 | 79 | int main() { 80 | cin.tie(0), ios_base::sync_with_stdio(false); 81 | solve(); 82 | return 0; 83 | } -------------------------------------------------------------------------------- /src/15장/15-3-2.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | static int N, S; 6 | static int[] arr; 7 | static int answer = 0; 8 | 9 | public static void main(String[] args) { 10 | Scanner sc = new Scanner(System.in); 11 | N = sc.nextInt(); 12 | S = sc.nextInt(); 13 | arr = new int[N]; 14 | for (int i = 0; i < N; i++) 15 | arr[i] = sc.nextInt(); 16 | dfs(0, 0); 17 | System.out.println(S == 0 ? answer - 1 : answer); 18 | } 19 | private static void dfs(int idx, int sum) { 20 | if (idx == N) { 21 | if (sum == S) 22 | answer++; 23 | return; 24 | } 25 | dfs(idx + 1, sum + arr[idx]); 26 | dfs(idx + 1, sum); 27 | } 28 | } -------------------------------------------------------------------------------- /src/15장/15-3-2.py: -------------------------------------------------------------------------------- 1 | def dfs(idx, sum): 2 | global answer 3 | if(idx >= n): 4 | return 5 | sum+=arr[idx] 6 | if(s == sum): 7 | answer += 1 8 | dfs(idx+1, sum-arr[idx]) 9 | dfs(idx+1, sum) 10 | 11 | n, s = map(int, input().split()) 12 | arr = list(map(int, input().split())) 13 | answer=0 14 | dfs(0,0) 15 | print(answer) -------------------------------------------------------------------------------- /src/15장/15-3-3.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static int[][] vertex; 6 | public static boolean[] visit; 7 | public static void main(String[] args) { 8 | Scanner sc = new Scanner(System.in); 9 | int n = sc.nextInt(); 10 | int m = sc.nextInt(); 11 | int v = sc.nextInt(); 12 | vertex = new int[n+1][n+1]; 13 | for(int i=1;i<=m;i++) { 14 | int a = sc.nextInt(); 15 | int b = sc.nextInt(); 16 | vertex[a][b] = 1; 17 | vertex[b][a] = 1; 18 | } 19 | visit = new boolean[n+1]; 20 | dfs(v); 21 | System.out.println(); 22 | visit = new boolean[n+1]; 23 | bfs(v); 24 | 25 | 26 | } 27 | public static void dfs(int v) { 28 | visit[v] = true; 29 | System.out.print(v+ " "); 30 | if(v == vertex.length) { 31 | return; 32 | } 33 | for(int a=1;a que = new LinkedList(); 42 | que.add(v); 43 | visit[v] = true; 44 | System.out.print(v+ " "); 45 | while(!que.isEmpty()) { 46 | int temp = que.peek(); 47 | que.poll(); 48 | for(int i=1; i 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n,k;cin>>n>>k; 57 | int up=1; 58 | for(int i=1;i<=n;i++){ 59 | up*=i; 60 | } 61 | int down=1; 62 | for(int i=1;i<=n-k;i++){ 63 | down*=i; 64 | } 65 | int down2=1; 66 | for(int i=1;i<=k;i++){ 67 | down*=i; 68 | } 69 | down*=down2; 70 | cout< 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | i64 com[1001][1001]{ 0, }; 55 | 56 | // ........................main.......................... // 57 | void solve() { 58 | int n, m; cin >> n >> m; 59 | com[1][0] = 1; 60 | com[1][1] = 1; 61 | 62 | for (int i = 2; i <= n; i++) { 63 | com[i][0] = 1; 64 | for (int j = 1; j <= m; j++) { 65 | com[i][j] = (com[i - 1][j - 1] + com[i - 1][j])%10007; 66 | } 67 | } 68 | cout << com[n][m] % 10007<< endl; 69 | 70 | } 71 | 72 | int main() { 73 | cin.tie(0), ios_base::sync_with_stdio(false); 74 | solve(); 75 | return 0; 76 | } -------------------------------------------------------------------------------- /src/16장/16-2-2.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Scanner sc = new Scanner(System.in); 7 | int N = sc.nextInt(); 8 | int K = sc.nextInt(); 9 | int[][] dp = new int[N + 1][N + 1]; 10 | for (int i = 0; i < dp.length; i++) { 11 | for (int j = 0; j <= i; j++) { 12 | if (i == j || j == 0) 13 | dp[i][j] = 1; 14 | else 15 | dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]) % 10007; 16 | } 17 | } 18 | System.out.println(dp[N][K]); 19 | 20 | } 21 | } -------------------------------------------------------------------------------- /src/16장/16-2-2.py: -------------------------------------------------------------------------------- 1 | n, k=map(int, input().split()) 2 | dp = [[0]*1001 for _ in range(1001)] 3 | 4 | for i in range(1, n+1) : 5 | for j in range(0, i+1) : 6 | if j==0: 7 | dp[i][j]=1 8 | elif j==i: 9 | dp[i][j]=1 10 | else: 11 | dp[i][j] = ( dp[i-1][j-1] + dp[i-1][j]) %10007 12 | 13 | print(dp[n][k]) -------------------------------------------------------------------------------- /src/16장/16-2-3.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 17 | 18 | typedef long long i64; 19 | typedef unsigned long long ui64; 20 | typedef double ld; 21 | typedef pair ii; 22 | typedef pair iii; 23 | typedef vector vi; 24 | typedef vector vi64; 25 | typedef vector vs; 26 | typedef vector vvi; 27 | typedef vector vii; 28 | typedef vector vvii; 29 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 30 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 31 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 32 | 33 | // ........................fuction.......................... // 34 | 35 | i64 mo[1001]{0,}; 36 | 37 | // ........................main.......................... // 38 | void solve() { 39 | i64 n,m;cin>>n>>m; 40 | vi64 a(n); 41 | for(int i=0;i>a[i]; 43 | mo[a[i]%m]++; 44 | } 45 | bool tof=true; 46 | for(int i=0;i<1000;i++){ 47 | if(mo[i]>1)tof=false; 48 | } 49 | if(!tof)cout<<0<1 :tof=False 12 | 13 | if tof==False: print(0) 14 | else: 15 | answer=1 16 | for i in range(n-1): 17 | for j in range(i+1,n): 18 | tmp=0 19 | if a[i] 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 17 | 18 | typedef long long i64; 19 | typedef unsigned long long ui64; 20 | typedef double ld; 21 | typedef pair ii; 22 | typedef pair iii; 23 | typedef vector vi; 24 | typedef vector vi64; 25 | typedef vector vs; 26 | typedef vector vvi; 27 | typedef vector vii; 28 | typedef vector vvii; 29 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 30 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 31 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 32 | 33 | // ........................fuction.......................... // 34 | 35 | i64 n; 36 | i64 sosu(i64 a){ 37 | for(i64 i=2;i<=sqrt(a);i++){ 38 | if(a%i==0)return i; 39 | } 40 | return -1; 41 | } 42 | i64 soin(i64 a){ 43 | for(i64 i=2;i<=sqrt(a);i++){ 44 | if(a%i==0){ 45 | while(a%i==0){ 46 | a/=i; 47 | } 48 | if(a==1)return 1; 49 | else return -1; 50 | } 51 | } 52 | return -1; 53 | } 54 | 55 | // ........................main.......................... // 56 | void solve() { 57 | cin>>n; 58 | i64 ans=sosu(n); 59 | i64 s=soin(n); 60 | if(ans==-1) cout<m){ 9 | System.out.println(0); 10 | } 11 | else{ 12 | long a[] = new long[n]; 13 | for(int i=0;i 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | bool sosu(int a) { 54 | for (int i = 2; i <= sqrt(a); i++) { 55 | if (a % i == 0) { 56 | return false; 57 | } 58 | } 59 | return true; 60 | } 61 | 62 | // ........................main.......................... // 63 | void solve() { 64 | int m, n; cin >> m >> n; 65 | for (int i = m; i <= n; i++) { 66 | if (i == 1)continue; 67 | if (sosu(i)) { 68 | cout << i << endl; 69 | } 70 | } 71 | } 72 | 73 | int main() { 74 | cin.tie(0), ios_base::sync_with_stdio(false); 75 | solve(); 76 | return 0; 77 | } -------------------------------------------------------------------------------- /src/16장/16-4.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Scanner scan = new Scanner(System.in); 7 | int N=scan.nextInt(); 8 | int M=scan.nextInt(); 9 | StringBuilder sb = new StringBuilder(); 10 | 11 | if(N==1 &&M==1) { 12 | 13 | } 14 | else if(N==1) { 15 | for(int i=N+1;i<=M;i++) { 16 | int count=0; 17 | for(int j=2;j<=Math.sqrt(i);j++) { 18 | if(i%j==0) { 19 | count+=1; 20 | break; 21 | } 22 | } 23 | if(count==0) { 24 | sb.append(i+"\n"); 25 | } 26 | } 27 | System.out.print(sb.toString()); 28 | 29 | } 30 | else if(N!=1) { 31 | for(int i=N;i<=M;i++) { 32 | int count=0; 33 | for(int j=2;j<=Math.sqrt(i);j++) { 34 | if(i%j==0) { 35 | count+=1; 36 | break; 37 | } 38 | } 39 | if(count==0) { 40 | sb.append(i+"\n"); 41 | } 42 | } 43 | System.out.print(sb.toString()); 44 | } 45 | scan.close(); 46 | } 47 | } -------------------------------------------------------------------------------- /src/16장/16-4.py: -------------------------------------------------------------------------------- 1 | def prime_check(num): 2 | if num==1:return False 3 | else: 4 | for i in range(2, int(num**0.5)+1): 5 | if num%i == 0: 6 | return False 7 | return True 8 | 9 | M, N = map(int, input().split()) 10 | 11 | for i in range(M, N+1): 12 | if prime_check(i): 13 | print(i) -------------------------------------------------------------------------------- /src/16장/16-5.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int t; cin >> t; 57 | while (t--) { 58 | i64 a, b; cin >> a >> b; 59 | cout << lcm(a, b) << endl; 60 | } 61 | 62 | } 63 | 64 | int main() { 65 | cin.tie(0), ios_base::sync_with_stdio(false); 66 | solve(); 67 | return 0; 68 | } -------------------------------------------------------------------------------- /src/16장/16-5.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 7 | int n = Integer.parseInt(br.readLine()); 8 | for (int i = 0; i < n; i++) { 9 | String[] str = br.readLine().split(" "); 10 | int a = Integer.parseInt(str[0]); 11 | int b = Integer.parseInt(str[1]); 12 | System.out.println(Lcm(a, b)); 13 | } 14 | } 15 | 16 | private static long Lcm(long a, long b) { 17 | return (a*b)/GCD(a,b); 18 | } 19 | 20 | private static long GCD(long a, long b) { 21 | if (b % a == 0) return a; 22 | else return GCD(b%a,a); 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /src/16장/16-5.py: -------------------------------------------------------------------------------- 1 | def LCM(a, b): 2 | return (a * b) // GCD(a, b) 3 | 4 | def GCD(a, b): 5 | if b % a: return GCD(b % a, a) 6 | else: return a 7 | 8 | n = int(input()) 9 | for i in range(n): 10 | a, b = map(int, input().split()) 11 | print(LCM(a, b)) -------------------------------------------------------------------------------- /src/17장/17-2.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Scanner sc = new Scanner(System.in); 7 | int N = sc.nextInt(); 8 | int[] a = new int[N]; 9 | for (int i = 0; i < N; i++) { 10 | a[i] = sc.nextInt(); 11 | } 12 | Arrays.sort(a); 13 | int M = sc.nextInt(); 14 | StringBuilder sb = new StringBuilder(); 15 | for (int i = 0; i < M; i++) { 16 | if (binarySearch(a, sc.nextInt()) >= 0) { 17 | sb.append(1).append('\n'); 18 | } else { 19 | sb.append(0).append('\n'); 20 | } 21 | } 22 | System.out.println(sb); 23 | } 24 | 25 | public static int binarySearch(int[] arr, int target) { 26 | int lo = 0; 27 | int hi = arr.length - 1; 28 | while (lo <= hi) { 29 | int mid = (lo + hi) / 2; 30 | if (target < arr[mid]) 31 | hi = mid - 1; 32 | else if (target > arr[mid]) 33 | lo = mid + 1; 34 | else 35 | return mid; 36 | } 37 | return -1; 38 | } 39 | } -------------------------------------------------------------------------------- /src/17장/17-2.py: -------------------------------------------------------------------------------- 1 | n=int(input()) 2 | a=list(map(int,input().split())) 3 | a.sort() 4 | 5 | def binarySeach(target): 6 | start=0 7 | end=n-1 8 | while start<=end: 9 | mid=(start+end)//2 10 | if a[mid]==target: 11 | print(1) 12 | return 13 | elif a[mid]<=target: 14 | start=mid+1 15 | else: 16 | end=mid-1 17 | print(0) 18 | return 19 | 20 | 21 | 22 | m=int(input()) 23 | b=list(map(int,input().split())) 24 | for i in range(m): 25 | binarySeach(b[i]) 26 | -------------------------------------------------------------------------------- /src/17장/17-3.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Scanner sc = new Scanner(System.in); 7 | int K = sc.nextInt(); 8 | long N = sc.nextLong(); 9 | long[] lanson = new long[K]; 10 | long answer = 0; 11 | for (int i = 0; i < K; i++) { 12 | lanson[i] = sc.nextLong(); 13 | } 14 | long low = 0; 15 | long high = (long)2147483647; 16 | while (low <= high) { 17 | long mid = (low + high) / 2; 18 | long num = 0; 19 | for (int i = 0; i < K; i++) { 20 | num += (lanson[i] / mid); 21 | } 22 | if (num >= N) { 23 | low = mid + 1; 24 | answer=mid; 25 | } else { 26 | high = mid - 1; 27 | } 28 | } 29 | System.out.println(answer); 30 | } 31 | } -------------------------------------------------------------------------------- /src/17장/17-3.py: -------------------------------------------------------------------------------- 1 | k, n = map(int, input().split()) 2 | lanson = [] 3 | for i in range(k): lanson.append(int(input())) 4 | low, high = 0, 10000000000 5 | answer=0 6 | while low <= high: 7 | mid = (low + high) // 2 8 | num = 0 9 | for len in lanson: 10 | num += len//mid 11 | if num >= n: 12 | low = mid + 1 13 | if mid> answer : 14 | answer=mid 15 | else: high = mid - 1 16 | print(answer) -------------------------------------------------------------------------------- /src/17장/17-4.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | static int N,H,up[], down[]; 6 | public static void main(String[] args) throws IOException { 7 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 8 | StringTokenizer st = new StringTokenizer(br.readLine()); 9 | N=Integer.parseInt(st.nextToken()); 10 | H=Integer.parseInt(st.nextToken()); 11 | up=new int[N/2]; 12 | down=new int[N/2]; 13 | int upIdx=0; 14 | int downIdx=0; 15 | int mx=Integer.MAX_VALUE; 16 | int ans=1; 17 | for(int i=0; iidxd+idxu) { 28 | mx=idxd+idxu; 29 | ans=1; 30 | } 31 | else if(mx==idxd+idxu) { 32 | ans++; 33 | } 34 | } 35 | System.out.print(mx+" "+ans); 36 | } 37 | private static int binarySearch(int left, int right, int height, int[] arr) { 38 | int min=Integer.MAX_VALUE; 39 | while(left<=right) { 40 | int mid = (left+right)/2; 41 | if(arr[mid]>=height) { 42 | min=Math.min(min, mid); 43 | right=mid-1; 44 | } 45 | else left=mid+1; 46 | } 47 | return min==Integer.MAX_VALUE? 0 : (N/2)-min; 48 | } 49 | } -------------------------------------------------------------------------------- /src/17장/17-4.py: -------------------------------------------------------------------------------- 1 | def upper_bound(s, e, d,L): 2 | while(e - s > 0): 3 | m = (s+e)//2 4 | if(L[m] <= d): 5 | s = m+1 6 | else: 7 | e = m 8 | return e 9 | 10 | def lower_bound(s, e, d,L): 11 | while(e - s > 0): 12 | m = (s+e)//2 13 | if(L[m] < d): 14 | s = m+1 15 | else: 16 | e = m 17 | return e 18 | 19 | up=[] 20 | down=[] 21 | result=[0]*500001 22 | n,h=map(int,input().split()) 23 | for i in range(n): 24 | obstacle=int(input()) 25 | if i%2==1: up.append(obstacle) 26 | else :down.append(obstacle) 27 | 28 | up.sort() 29 | down.sort() 30 | 31 | answer=0 32 | mx=2147483647 33 | 34 | for i in range(1,h+1): 35 | idxd=lower_bound(0,len(down),i,down) 36 | idxu=lower_bound(0,len(up),h-i+1,up) 37 | result[i]=n//2-idxd + n//2-idxu 38 | mx=min(mx,result[i]) 39 | 40 | for i in range(1,h+1): 41 | if result[i]==mx:answer+=1 42 | 43 | print(mx,answer) -------------------------------------------------------------------------------- /src/18장/18-4-1.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n;cin>>n; 57 | vi arr(n); 58 | for(int i=0;i>arr[i]; 59 | for(int i=0;iarr[j]){ 62 | int tmp=arr[i]; 63 | arr[i]=arr[j]; 64 | arr[j]=tmp; 65 | } 66 | } 67 | } 68 | for(int i=0;iM[j]) { 17 | temp=M[i]; 18 | M[i]=M[j]; 19 | M[j]=temp; 20 | } 21 | } 22 | } 23 | for(int i=0;iarr[j]: 8 | tmp=arr[i] 9 | arr[i]=arr[j] 10 | arr[j]=tmp 11 | for i in arr: 12 | print(i) 13 | 14 | -------------------------------------------------------------------------------- /src/18장/18-4-2.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int N; cin >> N; 57 | vector A(N); 58 | for (int i = 0; i < N; i++) { 59 | cin >> A[i]; 60 | } 61 | sort(A.begin(), A.end()); 62 | for (int i = 0; i < N; i++) { 63 | cout << A[i] << '\n'; 64 | } 65 | } 66 | 67 | int main() { 68 | cin.tie(0), ios_base::sync_with_stdio(false); 69 | solve(); 70 | return 0; 71 | } -------------------------------------------------------------------------------- /src/18장/18-4-2.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Scanner sc=new Scanner(System.in); 7 | BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 8 | StringBuilder sb=new StringBuilder(); 9 | Stack st=new Stack(); 10 | 11 | ArrayList al=new ArrayList(); 12 | int N=Integer.parseInt(br.readLine()); 13 | for(int i=0;i 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n; cin >> n; 57 | vi arr(n+1); 58 | for (int i = 1; i <= n; i++) { 59 | cin >> arr[i]; 60 | } 61 | sort(ALL(arr)); 62 | if (arr[1] != 1) { 63 | cout << 1 << endl; 64 | } 65 | else { 66 | int sum = 1; 67 | for (int i = 2; i <= n; i++) { 68 | if (sum+1 < arr[i]) { 69 | break; 70 | } 71 | sum += arr[i]; 72 | } 73 | cout << sum + 1 << endl; 74 | } 75 | } 76 | 77 | int main() { 78 | cin.tie(0), ios_base::sync_with_stdio(false); 79 | solve(); 80 | return 0; 81 | } -------------------------------------------------------------------------------- /src/18장/18-5.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 7 | int n = Integer.parseInt(br.readLine()); 8 | StringTokenizer st = new StringTokenizer(br.readLine()); 9 | int[] weight = new int[n]; 10 | for (int i=0; i() { // 0:나이 , 1:이름 15 | @Override 16 | public int compare(String[] o1,String[] o2) { 17 | return Integer.compare(Integer.parseInt(o1[0]), Integer.parseInt(o2[0])); 18 | } 19 | }); 20 | for(int i=0;i 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n;cin>>n; 57 | string num;cin>>num; 58 | int answer=0; 59 | for(int i=0;i 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | string str; cin >> str; 57 | int a, b; 58 | int idx = 0; 59 | for (int i = 0; i < str.length(); i++) { 60 | if (str[i]==':') { 61 | idx = i; 62 | break; 63 | } 64 | } 65 | a = stoi(str.substr(0,idx )); 66 | b = stoi(str.substr(idx+1, str.length()-idx)); 67 | int g = gcd(a, b); 68 | cout << a / g << ":" << b / g << endl; 69 | } 70 | 71 | int main() { 72 | cin.tie(0), ios_base::sync_with_stdio(false); 73 | solve(); 74 | return 0; 75 | } -------------------------------------------------------------------------------- /src/19장/19-3.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) { 6 | Scanner sc = new Scanner(System.in); 7 | String[] str = sc.nextLine().split(":"); 8 | int N = Integer.parseInt(str[0]); 9 | int M = Integer.parseInt(str[1]); 10 | int GCD = gcd(Math.max(N, M), Math.min(N, M)); 11 | System.out.println(N / GCD + ":" + M / GCD); 12 | } 13 | 14 | static int gcd(int a, int b) { 15 | if (b == 0) return a; 16 | return gcd(b, a % b); 17 | } 18 | } -------------------------------------------------------------------------------- /src/19장/19-3.py: -------------------------------------------------------------------------------- 1 | def GCD(a, b): 2 | if b % a: return GCD(b % a, a) 3 | else: return a 4 | 5 | n, m = map(int, input().split(':')) 6 | a = GCD(n, m) 7 | print(n//a,end='') 8 | print(":",end='') 9 | print(m//a,end='') 10 | -------------------------------------------------------------------------------- /src/19장/19-4.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 7 | 8 | String s = br.readLine(); 9 | String bomb = br.readLine(); 10 | Stack left = new Stack(); 11 | for (int i = 0; i < s.length(); i++) { 12 | left.push(s.charAt(i)); 13 | if (left.size() >= bomb.length()) { 14 | boolean tof = true; 15 | for (int j = 0; j < bomb.length(); j++) { 16 | if (left.get(left.size() - bomb.length() + j) != bomb.charAt(j)) { 17 | tof = false; 18 | break; 19 | } 20 | } 21 | if (tof) { 22 | for (int j = 0; j < bomb.length(); j++) { 23 | left.pop(); 24 | } 25 | } 26 | } 27 | } 28 | StringBuilder sb = new StringBuilder(); 29 | for(char ch : left) { 30 | sb.append(ch); 31 | } 32 | System.out.println(sb.length() > 0 ? sb.toString() : "FRULA"); 33 | } 34 | } -------------------------------------------------------------------------------- /src/19장/19-4.py: -------------------------------------------------------------------------------- 1 | s=str(input()) 2 | bomb=str(input()) 3 | left=[] 4 | 5 | start=0;end=len(s)-1 6 | while(start<=end): 7 | tof=True 8 | left.append(s[start]);start+=1 9 | if(len(left)>=len(bomb)): 10 | for i in range(len(bomb)): 11 | if bomb[i]!= left[len(left)-len(bomb)+i]: 12 | tof=False 13 | break 14 | if tof==True: 15 | for i in range(len(bomb)): 16 | left.pop() 17 | 18 | if len(left)==0 : print("FRULA") 19 | else : 20 | for i in range(len(left)): 21 | print(left[i],end='') 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/19장/19-5.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main{ 5 | public static void main(String[] args) throws IOException { 6 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 7 | StringBuilder sb = new StringBuilder(); 8 | int T = Integer.parseInt(br.readLine()); 9 | while(T--> 0){ 10 | Trie trie = new Trie(); 11 | boolean tof = true; 12 | int n = Integer.parseInt(br.readLine()); 13 | for(int j = 0; j < n; j++) { 14 | if(!trie.insert(br.readLine())) { 15 | tof = false; 16 | } 17 | } 18 | sb.append(tof == true ? "YES\n" : "NO\n"); 19 | } 20 | System.out.println(sb.toString()); 21 | } 22 | static class TrieNode { 23 | Map childNodes = new HashMap<>(); 24 | boolean isLast; 25 | } 26 | static class Trie { 27 | TrieNode root = new TrieNode(); 28 | boolean insert(String word) { 29 | TrieNode thisNode = root; 30 | for(int i = 0; i < word.length(); i++) { 31 | char n = word.charAt(i); 32 | if(thisNode.childNodes.get(n) == null) { 33 | thisNode.childNodes.put(n, new TrieNode()); 34 | } 35 | thisNode = thisNode.childNodes.get(n); 36 | if(thisNode.isLast == true) return false; 37 | } 38 | if(thisNode.childNodes.size() != 0) return false; 39 | thisNode.isLast = true; 40 | return true; 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /src/19장/19-5.py: -------------------------------------------------------------------------------- 1 | class NODE: 2 | def __init__(self): 3 | self.value = False 4 | self.childs ={} 5 | 6 | class Trie: 7 | def __init__(self): 8 | self.root = NODE() 9 | 10 | def insert(self, phone_num): 11 | curNode = self.root 12 | for num in phone_num: 13 | if num not in curNode.childs: 14 | curNode.childs[num] = NODE() 15 | curNode = curNode.childs[num] 16 | if curNode.value is True: 17 | return False 18 | curNode.value = True 19 | return True 20 | 21 | for _ in range(int(input().rstrip())): 22 | n = int(input().rstrip()) 23 | phone_List = [input().rstrip() for _ in range(n)] 24 | phone_List.sort() 25 | trie = Trie() 26 | tof=True 27 | for num in phone_List: 28 | tof = trie.insert(num) 29 | if not tof: 30 | break 31 | if tof:print("YES") 32 | else:print("NO") -------------------------------------------------------------------------------- /src/20장/20-2.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | vi dp(10001, 0); 57 | int N; cin >> N; 58 | vi glass(N + 1, 0); 59 | for (int i = 1; i <= N; i++) { 60 | cin >> glass[i]; 61 | } 62 | dp[1] = glass[1]; 63 | dp[2] = glass[1] + glass[2]; 64 | for (int i = 3; i <= N; i++) { 65 | dp[i] = max(dp[i - 1], max(dp[i - 2] + glass[i], dp[i - 3] + glass[i - 1] + glass[i])); 66 | } 67 | cout << dp[N]; 68 | } 69 | 70 | int main() { 71 | cin.tie(0), ios_base::sync_with_stdio(false); 72 | solve(); 73 | return 0; 74 | } -------------------------------------------------------------------------------- /src/20장/20-2.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Scanner in = new Scanner(System.in); 7 | int N = in.nextInt(); 8 | int[] glass = new int[N + 1]; 9 | int[] dp = new int[N + 1]; 10 | for (int i = 1; i <= N; i++) { 11 | glass[i] = in.nextInt(); 12 | } 13 | dp[1] = glass[1]; 14 | if (N > 1) { 15 | dp[2] = glass[1] + glass[2]; 16 | } 17 | for (int i = 3; i <= N; i++) { 18 | dp[i] = Math.max(dp[i - 1], Math.max(dp[i - 2] + glass[i], dp[i - 3] + glass[i - 1] + glass[i])); 19 | } 20 | System.out.println(dp[N]); 21 | } 22 | } -------------------------------------------------------------------------------- /src/20장/20-2.py: -------------------------------------------------------------------------------- 1 | dp=[0]*10001 2 | glass=[0]*10001 3 | 4 | n=int(input()) 5 | for i in range(1,n+1): 6 | glass[i]=int(input()) 7 | 8 | dp[1]=glass[1] 9 | dp[2]=glass[1]+glass[2] 10 | for i in range(3,n+1): 11 | dp[i]=max(dp[i-1],dp[i-2]+glass[i],dp[i-3]+glass[i-1]+glass[i]) 12 | 13 | print(dp[n]) -------------------------------------------------------------------------------- /src/20장/20-3.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | vi dp(1001, 0); 57 | int N; cin >> N; 58 | vi arr(N + 1, 0); 59 | for (int i = 1; i <= N; i++) { 60 | cin >> arr[i]; 61 | } 62 | int answer=0; 63 | for (int i = 1; i <= N; i++) { 64 | for (int j = 0; j < i; j++) { 65 | if (arr[j] < arr[i] ) { 66 | dp[i] = max(dp[i], dp[j]+1 ); 67 | } 68 | } 69 | answer = max(answer, dp[i]); 70 | } 71 | cout << answer; 72 | } 73 | 74 | int main() { 75 | cin.tie(0), ios_base::sync_with_stdio(false); 76 | solve(); 77 | return 0; 78 | } -------------------------------------------------------------------------------- /src/20장/20-3.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Scanner sc = new Scanner(System.in); 7 | int n = sc.nextInt(); 8 | int answer=0; 9 | int[] dp = new int[n+1]; 10 | int[] arr = new int[n+1]; 11 | for(int i=0; i=dp[i]){ 18 | dp[i]=dp[j]+1; 19 | } 20 | } 21 | } 22 | for(int i=0; ianswer) 24 | answer=dp[i]; 25 | } 26 | System.out.println(answer); 27 | } 28 | } -------------------------------------------------------------------------------- /src/20장/20-3.py: -------------------------------------------------------------------------------- 1 | dp=[0]*1001 2 | 3 | n=int(input()) 4 | arr=list(map(int,input().split())) 5 | arr.insert(0,0) 6 | 7 | answer=0 8 | for i in range(1,n+1): 9 | for j in range(0,i): 10 | if arr[j] m || ny > n) continue; 37 | if (map[x][y] > map[nx][ny]) { 38 | dp[x][y] += dp_bruteForce(nx, ny); 39 | } 40 | } 41 | } 42 | return dp[x][y]; 43 | } 44 | } -------------------------------------------------------------------------------- /src/20장/20-4.py: -------------------------------------------------------------------------------- 1 | m, n = map(int, input().split()) 2 | map = [list(map(int, input().split())) for _ in range(m)] 3 | dp = [[-1]*n for _ in range(m)] 4 | move=[[0,1],[1,0],[0,-1],[-1,0]] 5 | 6 | def dp_bruteForce(y,x): 7 | if dp[y][x]!=-1:return dp[y][x] 8 | if y==m-1 and x==n-1 : return 1 9 | 10 | dp[y][x]=0 11 | for i in range(0,4): 12 | dy=y+move[i][0] 13 | dx=x+move[i][1] 14 | if 0 <= dy < m and 0 <= dx < n and map[y][x]>map[dy][dx]: 15 | dp[y][x]+=dp_bruteForce(dy,dx) 16 | 17 | return dp[y][x] 18 | 19 | print(dp_bruteForce(0,0)) -------------------------------------------------------------------------------- /src/20장/20-5.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | int dp[3001]; 55 | 56 | // ........................main.......................... // 57 | void solve() { 58 | int t;cin>>t; 59 | while(t--){ 60 | int n;cin>>n; 61 | for(int i=0;i>a[i].fi; 66 | a[i].se=i; 67 | } 68 | sort(ALL(a)); 69 | for(int i=1;i { 6 | int x, y; 7 | Pair(int x, int y) { 8 | this.x = x; 9 | this.y = y; 10 | } 11 | public int compareTo(Pair p) { 12 | return y - p.y; 13 | } 14 | } 15 | public static void main(String[] args) { 16 | Scanner sc = new Scanner(System.in); 17 | StringBuilder sb = new StringBuilder(); 18 | 19 | int T = sc.nextInt(); 20 | while (T-- > 0) { 21 | int N = sc.nextInt(); 22 | int[] dp = new int[N]; 23 | for (int i = 0; i < N; i++) { 24 | dp[i] = sc.nextInt(); 25 | } 26 | Pair[] a = new Pair[N]; 27 | for (int i = 0; i < N; i++) { 28 | a[i] = new Pair(i, dp[i]); 29 | } 30 | Arrays.sort(a); 31 | int ans = N - 1; 32 | int cnt = 1; 33 | for (int i = 1; i < N; i++) { 34 | if (a[i - 1].x < a[i].x) { 35 | cnt++; 36 | } else { 37 | ans = Math.min(ans, N - cnt); 38 | cnt = 1; 39 | } 40 | } 41 | ans = Math.min(ans, N - cnt); 42 | sb.append(ans).append('\n'); 43 | } 44 | System.out.print(sb); 45 | } 46 | } -------------------------------------------------------------------------------- /src/20장/20-5.py: -------------------------------------------------------------------------------- 1 | dp=[0]*3001 2 | 3 | for _ in range(int(input())): 4 | n=int(input()) 5 | for i in range(0,n):dp[i]=1 6 | tmp=list(map(int,input().split())) 7 | a=[] 8 | mx=1 9 | for i in range(n): 10 | a.append([tmp[i],i]) 11 | a.sort() 12 | for i in range(1,n): 13 | if a[i-1][1] 2 | using namespace std; 3 | 4 | vector solution(vector Record) { 5 | vector RecordLog; 6 | vector Answer; 7 | vector> ParsingString; 8 | map MapTable; 9 | for(int i=0;i trace = new ArrayList(); 5 | HashMap map = new HashMap(); 6 | for (int i = 0; i < record.length; i++) { 7 | String[] temp = record[i].split(" "); 8 | if (temp[0].equals("Enter")) { 9 | trace.add(temp[1] + "님이 들어왔습니다."); 10 | map.put(temp[1], temp[2]); 11 | } else if (temp[0].equals("Leave")) { 12 | trace.add(temp[1] + "님이 나갔습니다."); 13 | } else { 14 | map.put(temp[1], temp[2]); 15 | } 16 | } 17 | String[] answer = new String[trace.size()]; 18 | for (int i = 0; i < trace.size(); i++) { 19 | int idx = trace.get(i).indexOf("님"); 20 | String name = trace.get(i).substring(0, idx); 21 | String[] temp = trace.get(i).split(" "); 22 | answer[i] = map.get(name) + "님이 " + temp[1]; 23 | } 24 | return answer; 25 | } 26 | } -------------------------------------------------------------------------------- /src/3장/3-2.py: -------------------------------------------------------------------------------- 1 | def solution(record): 2 | answer = [] 3 | trace = [] 4 | Map = {} 5 | 6 | for i in range(len(record)): 7 | temp = record[i].split(' ') 8 | 9 | if temp[0] == 'Enter': 10 | Map[temp[1]] = temp[2] 11 | trace.append([temp[0], temp[1]]) 12 | elif temp[0] == 'Leave': 13 | trace.append([temp[0], temp[1]]) 14 | else: 15 | Map[temp[1]] = temp[2] 16 | 17 | for i in range(len(trace)): 18 | if trace[i][0] == 'Enter': 19 | result = Map[trace[i][1]] + "님이 들어왔습니다." 20 | answer.append(result) 21 | else: 22 | result = Map[trace[i][1]] + "님이 나갔습니다." 23 | answer.append(result) 24 | 25 | return answer -------------------------------------------------------------------------------- /src/4장/4-3.java: -------------------------------------------------------------------------------- 1 | import java.util.ArrayList; 2 | import java.util.List; 3 | import java.util.Scanner; 4 | 5 | public class Main { 6 | static int N, M, answer = Integer.MAX_VALUE; 7 | static boolean[] choice_chicken; 8 | static List house, chicken; 9 | 10 | public static void main(String[] args) { 11 | Scanner sc = new Scanner(System.in); 12 | N = sc.nextInt(); 13 | M = sc.nextInt(); 14 | house = new ArrayList<>(); 15 | chicken = new ArrayList<>(); 16 | 17 | for (int i = 0; i < N; i++) { 18 | for (int j = 0; j < N; j++) { 19 | int tmp = sc.nextInt(); 20 | if (tmp == 1) 21 | house.add(new int[] { i, j }); 22 | else if (tmp == 2) 23 | chicken.add(new int[] { i, j }); 24 | } 25 | } 26 | choice_chicken = new boolean[chicken.size()]; 27 | Brute_Force(-1, 0); 28 | 29 | System.out.println(answer); 30 | } 31 | 32 | static void Brute_Force(int idx, int cnt) { 33 | if (cnt == M) { 34 | int dist = 0; 35 | 36 | for (int[] h : house) { 37 | int tmp = Integer.MAX_VALUE; 38 | for (int i = 0; i < choice_chicken.length; i++) { 39 | if (choice_chicken[i]) 40 | tmp = Math.min(tmp, Math.abs(h[0] - chicken.get(i)[0]) + Math.abs(h[1] - chicken.get(i)[1])); 41 | } 42 | dist += tmp; 43 | } 44 | answer = Math.min(answer, dist); 45 | return; 46 | } 47 | 48 | for (int i = idx + 1; i < choice_chicken.length; i++) { 49 | choice_chicken[i] = true; 50 | Brute_Force(i, cnt + 1); 51 | choice_chicken[i] = false; 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /src/4장/4-3.py: -------------------------------------------------------------------------------- 1 | def Brute_Force(idx, x, y): 2 | global answer 3 | if(idx == m): 4 | choice_chicken = [] 5 | for i in range(n): 6 | for j in range(n): 7 | if(City[i][j] == 3): 8 | choice_chicken.append((i,j)) 9 | res = Min_Distance(choice_chicken, house) 10 | if(answer > sum(res)): 11 | answer = sum(res) 12 | return 13 | else: 14 | for i in range(x, n): 15 | if(i == x): k = y 16 | else: k = 0 17 | for j in range(k, n): 18 | if(City[i][j] == 2): 19 | City[i][j] = 3 20 | Brute_Force(idx+1, i, j+1) 21 | City[i][j] = 2 22 | 23 | def Min_Distance(chicken,house): 24 | sum_Distance = [] 25 | for i in house: 26 | min_D = 987654321 27 | for j in chicken: 28 | Distance = abs(i[0]-j[0]) + abs(i[1]-j[1]) 29 | min_D = min(min_D, Distance) 30 | sum_Distance.append(min_D) 31 | return sum_Distance 32 | 33 | n, m = map(int, input().split()) 34 | City = [list(map(int, input().split())) for _ in range(n)] 35 | answer = 987654321 36 | house = [] 37 | for i in range(n): 38 | for j in range(n): 39 | if(City[i][j] == 1): 40 | house.append((i,j)) 41 | Brute_Force(0,0,0) 42 | print(answer) -------------------------------------------------------------------------------- /src/5장/5-1-1.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | cout << "Hello World!\n"; 57 | } 58 | 59 | int main() { 60 | cin.tie(0), ios_base::sync_with_stdio(false); 61 | solve(); 62 | return 0; 63 | } -------------------------------------------------------------------------------- /src/5장/5-1-1.java: -------------------------------------------------------------------------------- 1 | class Main { 2 | public static void main(String[] args) { 3 | System.out.println("Hello World!"); 4 | } 5 | } -------------------------------------------------------------------------------- /src/5장/5-1-1.py: -------------------------------------------------------------------------------- 1 | print('Hello World!') -------------------------------------------------------------------------------- /src/5장/5-1-2.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int a,b; 57 | cin>>a>>b; 58 | cout< 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int a,b;cin>>a>>b; 57 | if(a>b)cout<<'>'; 58 | else if(aB) { 14 | System.out.println(">"); 15 | } 16 | else if(A B: 3 | print('>') 4 | elif A < B: 5 | print('<') 6 | else: 7 | print('==') -------------------------------------------------------------------------------- /src/5장/5-3-1.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n;cin>>n; 57 | for(int i=0;i 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n;cin>>n; 57 | for(int i=0;i 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n;cin>>n; 57 | for(int i=0;i 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | int sum(int a,int b){ 55 | return a+b; 56 | } 57 | int sub(int a,int b){ 58 | return a-b; 59 | } 60 | int mul(int a,int b){ 61 | return a*b; 62 | } 63 | int divv(int a,int b){ 64 | return a/b; 65 | } 66 | int sur(int a, int b){ 67 | return a%b; 68 | } 69 | 70 | // ........................main.......................... // 71 | void solve() { 72 | int a,b; 73 | cin>>a>>b; 74 | cout< 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n;cin>>n; 57 | int mx=-1e9,mn=1e9; 58 | for(int i=0;i>tmp; 60 | mx=max(mx,tmp); 61 | mn=min(mn,tmp); 62 | } 63 | cout< max_num: 10 | max_num = num 11 | if num < min_num: 12 | min_num = num 13 | 14 | print(min_num, max_num) -------------------------------------------------------------------------------- /src/6장/6-1-2.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int hu[5][4]; int mx = 0; 57 | for (int i = 0; i < 5; i++) { 58 | for (int j = 0; j < 4; j++) { 59 | cin >> hu[i][j]; 60 | if (i == 0) { 61 | mx += hu[i][j]; 62 | } 63 | } 64 | } 65 | int win[5]; int idx = 0; 66 | for (int i = 0; i < 5; i++) { 67 | int sum = 0; 68 | for (int j = 0; j < 4; j++) { 69 | sum += hu[i][j]; 70 | } 71 | win[i] = sum; 72 | if (i != 0 && mx < win[i]) { 73 | idx = i; 74 | mx = win[i]; 75 | } 76 | } 77 | cout << idx + 1 << " " << mx; 78 | } 79 | 80 | int main() { 81 | cin.tie(0), ios_base::sync_with_stdio(false); 82 | solve(); 83 | return 0; 84 | } -------------------------------------------------------------------------------- /src/6장/6-1-2.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | Scanner sc = new Scanner(System.in); 7 | int[] human = new int[5]; 8 | for(int i=0; i<5; i++) { 9 | for(int j=0; j<4; j++) { 10 | human[i] += sc.nextInt(); 11 | } 12 | } 13 | int win = 0; 14 | for(int i=1; i<5; i++) { 15 | if(human[win] < human[i]) 16 | win = i; 17 | } 18 | System.out.printf("%d %d", win+1, human[win]); 19 | } 20 | } -------------------------------------------------------------------------------- /src/6장/6-1-2.py: -------------------------------------------------------------------------------- 1 | human=[list(map(int, input().split())) for _ in range(5)] 2 | humanScore=[0]*5 3 | score=0 4 | for i in range(5): 5 | sum=0 6 | for j in range(4): 7 | sum+=human[i][j] 8 | humanScore[i]=sum 9 | score=max(score,sum) 10 | 11 | for i in range(5): 12 | if humanScore[i]==score: 13 | print(i+1,score) 14 | break 15 | -------------------------------------------------------------------------------- /src/7장/7-4.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.*; 3 | 4 | public class Main { 5 | 6 | public static void main (String[] args) throws IOException { 7 | BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 8 | StringBuilder sb=new StringBuilder(); 9 | Scanner sc=new Scanner(System.in); 10 | Stack st=new Stack(); 11 | int N=sc.nextInt(); 12 | for(int i=0;i<=N;i++) { 13 | String str=sc.nextLine(); 14 | if(str.contains("push")) { 15 | st.push(str.substring(5)); 16 | } 17 | else if(str.contains("pop")) { 18 | if(st.isEmpty()) { 19 | System.out.println("-1"); 20 | } 21 | else { 22 | System.out.println(st.pop()); 23 | } 24 | } 25 | else if(str.contains("size")) { 26 | System.out.println(st.size()); 27 | } 28 | else if(str.contains("empty")) { 29 | if(st.isEmpty()) { 30 | System.out.println("1"); 31 | } 32 | else { 33 | System.out.println("0"); 34 | } 35 | } 36 | else if(str.contains("top")) { 37 | if(st.isEmpty()) { 38 | System.out.println("-1"); 39 | } 40 | else { 41 | System.out.println(st.peek()); 42 | } 43 | } 44 | } 45 | 46 | 47 | } 48 | } -------------------------------------------------------------------------------- /src/7장/7-4.py: -------------------------------------------------------------------------------- 1 | import sys 2 | n = int(sys.stdin.readline()) 3 | 4 | stack=[] 5 | for i in range(n): 6 | command = sys.stdin.readline().split() 7 | 8 | if command[0]=='push': 9 | stack.append(command[1]) 10 | elif command[0]=='pop': 11 | if len(stack)==0: 12 | print(-1) 13 | else: 14 | print(stack.pop()) 15 | elif command[0] == 'size': 16 | print(len(stack)) 17 | elif command[0] == 'empty': 18 | if len(stack)==0: 19 | print(1) 20 | else: 21 | print(0) 22 | elif command[0] == 'top': 23 | if len(stack)==0: 24 | print(-1) 25 | else: 26 | print(stack[-1]) -------------------------------------------------------------------------------- /src/7장/7-5.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | string g; cin >> g; 57 | stack state; 58 | 59 | int cnt = 0; 60 | int sum = 0; 61 | for (int i = 0; i < g.length(); i++) { 62 | if (!(state.empty()) && state.top()=='(') { 63 | if (g.at(i) == '(') { 64 | cnt++; 65 | } 66 | else if (g.at(i) == ')') { 67 | sum += cnt; 68 | } 69 | } 70 | else if (!(state.empty()) && state.top() == ')') { 71 | if (g.at(i) == ')') { 72 | sum += 1; 73 | cnt--; 74 | } 75 | } 76 | state.push(g.at(i)); 77 | } 78 | cout << sum; 79 | } 80 | 81 | int main() { 82 | cin.tie(0), ios_base::sync_with_stdio(false); 83 | solve(); 84 | return 0; 85 | } -------------------------------------------------------------------------------- /src/7장/7-5.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Scanner sc = new Scanner(System.in); 7 | String galho = sc.nextLine(); 8 | Stack stack = new Stack<>(); 9 | int answer = 0; 10 | 11 | for (int i = 0; i < galho.length(); i++) { 12 | if (galho.charAt(i) == '(') { 13 | stack.push('('); 14 | continue; 15 | } 16 | if (galho.charAt(i) == ')') { 17 | stack.pop(); 18 | 19 | if (galho.charAt(i - 1) == '(') { 20 | answer += stack.size(); 21 | } else { 22 | answer++; 23 | } 24 | } 25 | } 26 | System.out.println(answer); 27 | } 28 | } -------------------------------------------------------------------------------- /src/7장/7-5.py: -------------------------------------------------------------------------------- 1 | galho = input() 2 | stack = [] 3 | answer = 0 4 | for i in range(len(galho)): 5 | if galho[i] == '(': 6 | stack.append(galho[i]) 7 | else: 8 | if galho[i-1] == '(': 9 | stack.pop() 10 | answer += len(stack) 11 | else: 12 | stack.pop() 13 | answer += 1 14 | print(answer) 15 | -------------------------------------------------------------------------------- /src/7장/7-6.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int n, k; cin >> n >> k; 57 | string number; cin >> number; 58 | deque answer; 59 | for (int i = 0; i < number.length(); i++) { 60 | while (k && !answer.empty() && answer.back() answer = new ArrayDeque<>(); 17 | for (int i = 0; i < number.length; i++) { 18 | while (K > 0 && !answer.isEmpty() && answer.getLast() < number[i]) { 19 | answer.removeLast(); 20 | K--; 21 | } 22 | answer.addLast(number[i]); 23 | } 24 | 25 | StringBuilder ans = new StringBuilder(); 26 | while (answer.size() > K) { 27 | ans.append(answer.removeFirst()); 28 | } 29 | 30 | bw.write(ans.toString() + "\n"); 31 | bw.flush(); 32 | bw.close(); 33 | br.close(); 34 | } 35 | } -------------------------------------------------------------------------------- /src/7장/7-6.py: -------------------------------------------------------------------------------- 1 | n, k = map(int, input().split()) 2 | number = list(input()) 3 | 4 | answer = [] 5 | cnt = k 6 | for num in number: 7 | while answer and cnt > 0 and answer[-1] < num: 8 | del answer[-1] 9 | cnt -= 1 10 | answer.append(num) 11 | 12 | print(''.join(answer[:n-k])) 13 | -------------------------------------------------------------------------------- /src/8장/8-2.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Queue queue = new LinkedList<>(); 7 | BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 8 | BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 9 | int n = Integer.parseInt(bf.readLine()); 10 | String back = ""; 11 | for (int i = 0; i < n; i++) { 12 | String[] command = bf.readLine().split(" "); 13 | if (command[0].equals("push")) { 14 | back = command[1]; 15 | queue.add(command[1]); 16 | } else if (command[0].equals("pop")) { 17 | bw.write(queue.isEmpty() ? "-1" : queue.poll()); 18 | bw.newLine(); 19 | } else if (command[0].equals("size")) { 20 | bw.write(String.valueOf(queue.size())); 21 | bw.newLine(); 22 | } else if (command[0].equals("empty")) { 23 | bw.write(queue.isEmpty() ? "1" : "0"); 24 | bw.newLine(); 25 | } else if (command[0].equals("front")) { 26 | bw.write(queue.isEmpty() ? "-1" : queue.peek()); 27 | bw.newLine(); 28 | } else if (command[0].equals("back")) { 29 | bw.write(queue.isEmpty() ? "-1" : back); 30 | bw.newLine(); 31 | } 32 | } 33 | bw.flush(); 34 | bw.close(); 35 | 36 | } 37 | } -------------------------------------------------------------------------------- /src/8장/8-2.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from collections import deque 3 | n = int(sys.stdin.readline()) 4 | queue = deque([]) 5 | 6 | for i in range(n): 7 | command = sys.stdin.readline().split() 8 | if command[0] == 'push': 9 | queue.append(command[1]) 10 | elif command[0] == 'pop': 11 | if not queue: 12 | print(-1) 13 | else: 14 | print(queue.popleft()) 15 | elif command[0] == 'size': 16 | print(len(queue)) 17 | elif command[0] == 'empty': 18 | if not queue: 19 | print(1) 20 | else: 21 | print(0) 22 | elif command[0] == 'front': 23 | if not queue: 24 | print(-1) 25 | else: 26 | print(queue[0]) 27 | elif command[0] == 'back': 28 | if not queue: 29 | print(-1) 30 | else: 31 | print(queue[-1]) 32 | -------------------------------------------------------------------------------- /src/8장/8-3.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define FOR(i, f, n) for(int (i) = (f); (i) < (int)(n); ++(i)) 5 | #define RFOR(i, f, n) for(int (i) = (f); (i) > (int)(n); --(i)) 6 | #define FER(i, f, n) for(int (i) = (f); (i) <= (int)(n); ++(i)) 7 | #define RFER(i, f, n) for(int (i) = (f); (i) >= (int)(n); --(i)) 8 | #define pb push_back 9 | #define fi first 10 | #define se second 11 | #define endl '\n' 12 | #define sz(A) (int)(A).size() 13 | #define ALL(A) A.begin(), A.end() 14 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 15 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 16 | #define MS(A,B) memset(A,B,sizeof(A)); 17 | #define UNIQUE(c) (c).resize(unique(ALL(c)) - (c).begin()) //벡터에서 중복된수 제거 18 | 19 | typedef long long i64; 20 | typedef unsigned long long ui64; 21 | typedef double ld; 22 | typedef pair ii; 23 | typedef pair iii; 24 | typedef vector vi; 25 | typedef vector vi64; 26 | typedef vector vs; 27 | typedef vector vvi; 28 | typedef vector vii; 29 | typedef vector vvii; 30 | inline i64 gcd(i64 a, i64 b) { if (a % b == 0)return b; else { return gcd(b, a % b); } } 31 | inline i64 lcm(i64 a, i64 b) { return a * b / gcd(a, b); } 32 | inline i64 gaus(i64 a, i64 b) { return (a + b) * (b - a + 1) / 2; } 33 | inline i64 Pow(i64 x,i64 n,i64 m){i64 r=1;while(n){if(n&1){r=(r*x)%m;}x=(x*x)%m;n>>=1;}return r;} 34 | 35 | template ostream& operator<<(ostream& os, vector v) { 36 | os << "["; 37 | int cnt = 0; 38 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 39 | return os << "]"; 40 | } 41 | template ostream& operator<<(ostream& os, map v) { 42 | os << "["; 43 | int cnt = 0; 44 | for (auto vv : v) { os << vv; if (++cnt < v.size()) os << ","; } 45 | return os << "]"; 46 | } 47 | template ostream& operator<<(ostream& os, pair p) { 48 | return os << "(" << p.fi << "," << p.se << ")"; 49 | } 50 | // ........................fuction1.......................... // 51 | 52 | // ........................fuction2.......................... // 53 | 54 | // ........................main.......................... // 55 | void solve() { 56 | int N; cin >> N; 57 | deque deque; 58 | for (int i = 1; i <= N; i++) { 59 | deque.pb(i); 60 | } 61 | int cnt = 0; 62 | while (deque.size()!=1) { 63 | if (cnt==1) { 64 | cnt = 0; 65 | deque.pb(deque.front()); 66 | deque.pop_front(); 67 | } 68 | else { 69 | deque.pop_front(); 70 | cnt++; 71 | } 72 | } 73 | cout << deque.front(); 74 | } 75 | 76 | int main() { 77 | cin.tie(0), ios_base::sync_with_stdio(false); 78 | solve(); 79 | return 0; 80 | } -------------------------------------------------------------------------------- /src/8장/8-3.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | Scanner sc = new Scanner(System.in); 7 | Queue queue = new LinkedList<>(); 8 | int N = sc.nextInt(); 9 | for(int i = 1; i <= N; i++) { 10 | queue.offer(i); 11 | } 12 | while(queue.size() > 1) { 13 | queue.poll(); 14 | queue.offer(queue.poll()); 15 | } 16 | 17 | System.out.println(queue.poll()); 18 | } 19 | } -------------------------------------------------------------------------------- /src/8장/8-3.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from collections import deque 3 | 4 | N = int(sys.stdin.readline()) 5 | 6 | queue = deque() 7 | for i in range(N): 8 | queue.append(i + 1) 9 | 10 | while len(queue) > 1: 11 | queue.popleft() 12 | queue.append(queue.popleft()) 13 | 14 | print(queue.pop()) 15 | -------------------------------------------------------------------------------- /src/8장/8-4.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | import java.io.*; 3 | 4 | public class Main { 5 | 6 | static Queue times = new LinkedList<>(); 7 | static Deque snakeDeque = new ArrayDeque<>(); 8 | static int direction = 3; 9 | static int[][] board; 10 | static int[] dx = { -1, 0, 1, 0 }; 11 | static int[] dy = { 0, -1, 0, 1 }; 12 | 13 | public static void main(String[] args) throws IOException { 14 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 15 | StringTokenizer st; 16 | 17 | int N = Integer.parseInt(br.readLine()); 18 | int K = Integer.parseInt(br.readLine()); 19 | 20 | board = new int[N][N]; 21 | board[0][0] = -1; 22 | snakeDeque.offer(new Point(0, 0)); 23 | 24 | for (int i = 0; i < K; i++) { 25 | st = new StringTokenizer(br.readLine()); 26 | int a = Integer.parseInt(st.nextToken()) - 1; 27 | int b = Integer.parseInt(st.nextToken()) - 1; 28 | board[a][b] = 1; 29 | } 30 | int L = Integer.parseInt(br.readLine()); 31 | for (int i = 0; i < L; i++) { 32 | st = new StringTokenizer(br.readLine()); 33 | int x = Integer.parseInt(st.nextToken()); 34 | String s = st.nextToken(); 35 | int c; 36 | if (s.equals("L")) 37 | c = 0; 38 | else 39 | c = 1; 40 | times.add(new Point(x, c)); 41 | } 42 | 43 | int time = 0; 44 | int X = times.peek().x; 45 | int C = times.poll().y; 46 | 47 | while (true) { 48 | time++; 49 | int nx = snakeDeque.peekFirst().x + dx[direction]; 50 | int ny = snakeDeque.peekFirst().y + dy[direction]; 51 | if (nx < 0 || nx >= N || ny < 0 || ny >= N || board[nx][ny] == -1) { 52 | break; 53 | } 54 | if (board[nx][ny] == 1) { 55 | board[nx][ny] = -1; 56 | snakeDeque.offerFirst(new Point(nx, ny)); 57 | } else { 58 | board[nx][ny] = -1; 59 | snakeDeque.offerFirst(new Point(nx, ny)); 60 | board[snakeDeque.peekLast().x][snakeDeque.pollLast().y] = 0; 61 | } 62 | if (time == X) { 63 | if (C == 0) { 64 | direction = (direction + 1) % 4; 65 | } else { 66 | direction = (direction + 3) % 4; 67 | } 68 | if (!times.isEmpty()) { 69 | X = times.peek().x; 70 | C = times.poll().y; 71 | } 72 | } 73 | } 74 | System.out.println(time); 75 | br.close(); 76 | } 77 | 78 | } 79 | 80 | class Point { 81 | int x; 82 | int y; 83 | 84 | Point(int x, int y) { 85 | this.x = x; 86 | this.y = y; 87 | } 88 | } -------------------------------------------------------------------------------- /src/8장/8-4.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | def direction_change(d, c): 4 | if c == "L": 5 | d = (d - 1) % 4 6 | else: 7 | d = (d + 1) % 4 8 | return d 9 | 10 | N = int(input()) 11 | K = int(input()) 12 | board = [[0] * N for _ in range(N)] 13 | for _ in range(K): 14 | a, b = map(int, input().split()) 15 | board[a - 1][b - 1] = 1 16 | L = int(input()) 17 | times = {} 18 | for i in range(L): 19 | X, C = input().split() 20 | times[int(X)] = C 21 | 22 | dy = [-1, 0, 1, 0] 23 | dx = [0, 1, 0, -1] 24 | 25 | direction = 1 26 | time = 1 27 | y, x = 0, 0 28 | snake = deque([[y, x]]) 29 | board[y][x] = 2 30 | 31 | while True: 32 | y, x = y + dy[direction], x + dx[direction] 33 | if 0 <= y < N and 0 <= x < N and board[y][x] != 2: 34 | if not board[y][x] == 1: 35 | del_y, del_x = snake.popleft() 36 | board[del_y][del_x] = 0 37 | board[y][x] = 2 38 | snake.append([y, x]) 39 | if time in times.keys(): 40 | direction = direction_change(direction, times[time]) 41 | time += 1 42 | else: 43 | break 44 | 45 | print(time) -------------------------------------------------------------------------------- /src/9장/9-3.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.*; 3 | 4 | public class Main { 5 | static class Node { 6 | int left; 7 | int right; 8 | public Node(int left, int right) { 9 | this.left = left; 10 | this.right = right; 11 | } 12 | } 13 | static List[] tree; 14 | static StringBuilder sb = new StringBuilder(); 15 | public static void main(String[] args) throws IOException{ 16 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 17 | StringTokenizer st = null; 18 | int n = Integer.parseInt(br.readLine()); 19 | 20 | tree = new ArrayList[n+1]; 21 | for(int i=1; i(); 23 | } 24 | 25 | for(int i=1; i data): 23 | if(current.left == None): 24 | current.left = Node(data) 25 | break 26 | current = current.left 27 | 28 | if(current.data < data): 29 | if(current.right == None): 30 | current.right = Node(data) 31 | break 32 | current = current.right 33 | 34 | def postOrder(self,node=None): 35 | global answer 36 | 37 | if node == None: 38 | node = self.root 39 | 40 | if node.left != None: 41 | self.postOrder(node.left) 42 | if node.right != None: 43 | self.postOrder(node.right) 44 | answer.append(node.data) 45 | 46 | 47 | tree = Tree() 48 | while True: 49 | try: 50 | tree.add(int(input())) 51 | except: 52 | break 53 | answer = [] 54 | tree.postOrder() 55 | print('\n'.join(map(str,answer))) -------------------------------------------------------------------------------- /src/부록B/A.c++: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define pb push_back 5 | #define fi first 6 | #define se second 7 | #define endl '\n' 8 | #define sz(A) (int)(A).size() 9 | #define ALL(A) A.begin(), A.end() 10 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 11 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 12 | 13 | typedef long long i64; 14 | typedef unsigned long long ui64; 15 | typedef double ld; 16 | typedef pair ii; 17 | typedef pair iii; 18 | typedef vector vi; 19 | typedef vector vi64; 20 | typedef vector vs; 21 | typedef vector vvi; 22 | typedef vector vii; 23 | typedef vector vvii; 24 | // ........................fuction1.......................... // 25 | 26 | 27 | // ........................main.......................... // 28 | void solve() { 29 | int t;cin>>t; 30 | while(t--){ 31 | vi64 a(3); 32 | for(int i=0;i<3;i++)cin>>a[i]; 33 | sort(ALL(a)); 34 | cout< 2 | using namespace std; 3 | // ........................macro k.......................... // 4 | #define pb push_back 5 | #define fi first 6 | #define se second 7 | #define endl '\n' 8 | #define sz(A) (int)(A).size() 9 | #define ALL(A) A.begin(), A.end() 10 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 11 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 12 | 13 | typedef long long i64; 14 | typedef unsigned long long ui64; 15 | typedef double ld; 16 | typedef pair ii; 17 | typedef pair iii; 18 | typedef vector vi; 19 | typedef vector vi64; 20 | typedef vector vs; 21 | typedef vector vvi; 22 | typedef vector vii; 23 | typedef vector vvii; 24 | // ........................fuction1.......................... // 25 | 26 | 27 | // ........................main.......................... // 28 | void solve() { 29 | int t;cin>>t; 30 | while(t--){ 31 | int n,m;cin>>n>>m; 32 | i64 tb[101][101]{0,}; 33 | for(int i=0;i>tb[i][j]; 36 | } 37 | } 38 | i64 ans=0; 39 | for(int i=0;i 3 | using namespace std; 4 | // ........................macro k.......................... // 5 | #define pb push_back 6 | #define fi first 7 | #define se second 8 | #define endl '\n' 9 | #define sz(A) (int)(A).size() 10 | #define ALL(A) A.begin(), A.end() 11 | #define ub(A,B) upper_bound(ALL(A), B) - A.begin() 12 | #define lb(A,B) lower_bound(ALL(A), B) - A.begin() 13 | 14 | typedef long long i64; 15 | typedef unsigned long long ui64; 16 | typedef double ld; 17 | typedef pair ii; 18 | typedef pair iii; 19 | typedef vector vi; 20 | typedef vector vi64; 21 | typedef vector vs; 22 | typedef vector vvi; 23 | typedef vector vii; 24 | typedef vector vvii; 25 | // ........................fuction1.......................... // 26 | 27 | const i64 m=1e9+7; 28 | i64 frr[100100]{0,}; 29 | i64 fr2[100100]{0,}; 30 | inline i64 Pow(i64 x,i64 n){ 31 | if(x==1)return 1; 32 | i64 r=1; 33 | while(n){ 34 | if(n&1){ 35 | r=(r*x)%m; 36 | } 37 | x=(x*x)%m; 38 | n>>=1; 39 | } 40 | return r; 41 | } 42 | // ........................main.......................... // 43 | void solve() { 44 | i64 ans=0; 45 | string s;cin>>s; 46 | i64 n=s.length(); 47 | i64 f=0; 48 | for(i64 i=1;i<100000;i++){ 49 | f+=i; 50 | f%=m; 51 | frr[i]=f; 52 | } 53 | for(i64 i=1;i<100000;i++){ 54 | f=Pow(10,i-1); 55 | f*=i; 56 | f%=m; 57 | fr2[i]=f; 58 | fr2[i]+=fr2[i-1]; 59 | fr2[i]%=m; 60 | } 61 | for(int i=0;i