일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 기초100제
- 정렬
- 토이프로젝트
- react
- js to ts
- memory
- 백준
- 자료구조
- 코드업
- Redux
- 분할메모리할당
- error
- react-redux
- CPU 스케줄링
- 일상
- Java
- C++
- 스프링
- OS
- Spring
- 협업
- 알고리즘
- 프로그래머스
- Operating System
- 타입스크립트
- web
- 리덕스장바구니
- codeup
- 파이썬
- 공부
- Today
- Total
목록Algorithm (180)
감자튀김 공장🍟
✔ 문제 ✔ 풀이 rec = [list(map(int, input().split())) for _ in range(3)] for i in range(2): ans = 0 if rec[0][i] == rec[1][i]: ans = rec[2][i] elif rec[0][i] == rec[2][i]: ans = rec[1][i] elif rec[1][i] == rec[2][i]: ans = rec[0][i] print(ans, end=' ') ✔ 설명 주어진 세 점을 가지고 축에 평행한 직사각형을 만들기 위해 필요한 네 번째 점을 찾아야한다. 세 점이 주어졌을 때 x,y에서 혼자만 다른 값을 출력하면 된다. 예를 들어 (5, 5) (5, 7) (7, 5)가 주어지면 x 좌표는 (5, 5, 7) 이고 혼자만 ..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline x, y, w, h = map(int, input().split()) print(min(x, y, w-x, h-y)) ✔ 설명 직사각형의 경계면까지의 거리 중에서 가장 짧은 거리를 구하는 문제이다. 즉, (x, y)에서 직사각형의 테두리 (검은선)까지 가장 짧은 거리를 구하면 된다. (x, y)를 기준으로 4가지 방법이 있는데(초록선, 상하좌우) 이 방법들 중에서 가장 짧은 거리를 구하면 된다. ✔ 후기 점과 점 사이의 거리를 구하는 건 줄 알아서 예제 1번을 손으로 풀어봤는데 답이 다르게 나오길래 뭐가 다른건가 고민했다. 키워드는 '직사각형의 경계면까지의 거리' 이다... 사실 기하 문제에 포함되어 있는 문제라 안풀고..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline s = input().rstrip() res = set() for i in range(len(s)): for j in range(i, len(s)): temp = s[i:j+1] res.add(temp) print(len(res)) ✔ 설명 이중 for문을 돌면서 s[i:j+1]로 슬라이싱 한 문자열을 set인 res에 저장하면 된다. ✔ 후기 1개의 문자부터 len(s)개의 문자열까지 어떻게 나눠야하나 고민했는데 슬라이싱하는 방법이 있었다 ^_ㅜ 이것도 이중 for문을 사용하면 되는거였는데 기억이 나지 않아서 오래 고민했다 ( -̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥᷄◞ω◟-̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥̥..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n, m = map(int, input().split()) a = set(list(map(int, input().split()))) b = set(list(map(int, input().split()))) print(len(a ^ b)) ✔ 설명 파이썬 set 자료형을 사용하면 교집합, 합집합, 차집합, 대칭차집합 등을 이용할 수 있다. 문제와 같이 대칭 차집합을 구할려면 set1 ^ set2를 하면 된다.
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n, m = map(int, input().split()) dict = {} res = [] for i in range(n): x = input().rstrip() dict[x] = 0 for j in range(m): x = input().rstrip() if x in dict: res.append(x) else: dict[x] = 0 res.sort() print(len(res)) for k in res: print(k) ✔ 설명 듣도 못한 사람을 dictionary에 저장, 후에 보도 못한 사람을 dictionary에 저장할 때 이미 dict에 있다면 res에 저장, 없다면 그대로 dict에 저장한다. 후에 res..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n = int(input()) cards = list(map(int, input().split())) m = int(input()) check = list(map(int, input().split())) dict = {} for i in range(n): if cards[i] not in dict: dict[cards[i]] = 1 else: dict[cards[i]] += 1 for j in check: if j in dict: print(dict[j], end=' ') else: print(0, end=' ') ✔ 설명 10815번과 비슷한 문제지만 카드의 개수를 구하여 출력하는 점이 다르다. 전과 똑같이 dicti..
✔ 문제 https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net ✔ 풀이 import sys input = sys.stdin.readline n, m = map(int, input().split()) poket = {} for i in range(1, n+1): x = input().rstrip() poket[i] = x poket[x] = i for j in range(m): x = input().rstrip() if x..
✔ 문제 ✔ 풀이 🥺 시간초과 import sys input = sys.stdin.readline n, m = map(int, input().split()) s = [input() for _ in range(n)] count = 0 for _ in range(m): ms = input() if ms in s: count += 1 print(count) 😎 정답 코드 import sys input = sys.stdin.readline n, m = map(int, input().split()) s = set([input() for _ in range(n)]) count = 0 for _ in range(m): ms = input() if ms in s: count += 1 print(count) ✔ 설명 입..
✔ 문제 ✔ 풀이 😥 시간 초과 import sys input = sys.stdin.readline n = int(input()) n_cards = list(map(int, input().split())) m = int(input()) m_cards = list(map(int, input().split())) res = [0] * m for i in range(m): if m_cards[i] in n_cards: res[i] = 1 print(*res) 🥺 정답 코드 import sys input = sys.stdin.readline n = int(input()) n_cards = list(map(int, input().split())) m = int(input()) check = list(map(int..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n = int(input()) name = 666 count = 0 while True: if '666' in str(name): count += 1 if count == n: print(name) break name += 1 ✔ 설명 666, 1666, 2666, 3666 이렇게 n-1+666 이렇게 진행되는 것이 아니라 6660이나 6661도 생각해봐야 한다. 즉, 1~10000 까지의 숫자 중에서 666만 들어가면 되는 것이다. 1부터 10000까지의 숫자 중에서 666이 들어간 숫자를 찾고 이 숫자가 몇 번째로 666이 포함된 숫자인지 세면 된다. ✔ 후기 다른 사람들도 그랬겠지만 나도 맨 처음에는 n-1+666..