Today Sangmin Learned
[Python] BOJ(백준) 14405번 - 피카츄
CS/알고리즘 2021. 9. 7. 20:15

링크 https://www.acmicpc.net/problem/14405 난이도(solved.ac 참고) 실버5 풀이 이 문제는 너무 쉬워서 포스팅을 할지 말지 고민을 좀 했는데, 내 나름대로 괜찮다고 느꼈던 테크닉을 적기 위해 포스팅한다. 문자열에서 어떤 문자의 빈도를 구하기 위해서는 6행과 같은 방법이 괜찮다고 생각했다. 해당하는 값을 전부 *로 replace를 해주면 들어간 횟수를 구할 수 있다. 이 문제 한정으로 얘기를 해 보면, "pi", "ka", "chu" 외의 문자가 들어갈 경우 무조건 NO를 출력해야 한다. 그래서 *로 전부 바꾼 a를 돌면서 *가 아닌 값이 하나라도 있다면 flag를 False로 바꾼 뒤, flag가 False면 NO를 출력하게끔 했다. 알고 나면 괜찮은 테크닉이지만 모..

[Python] BOJ(백준) 1715번 - 카드 정렬하기
CS/알고리즘 2021. 9. 7. 18:35

링크 https://www.acmicpc.net/problem/1715 난이도(solved.ac 참고) 골드4 풀이 우선 예제에 대한 해석이 필요하다. 10 20 40 이라면 10 + 20을 하는 과정에서 횟수가 30만큼 증가되고, 이후에 30 + 40을 하는 과정에서 30에 70을 더해서 값이 100이 된다. 여기서는 heapq 모듈을 사용해서 a의 값을 줄이는 과정을 반복하고 있으므로 결국 리스트 a의 길이가 1이 되는 순간에 끝이 나야 한다. 근데 그 값은 최소가 되어야 한다. 이 경우라면 그냥 단순하게 작은 수들부터 비교를 한 뒤에 점차 큰 수와 그 비교값을 다시 비교하는 과정을 반복한다면 되겠다는 생각이 들었다. 그래서 최소힙이 가정되어있는 heapq에서 두 개의 값을 빼낸 다음(이 두개는 당연..

[Python] BOJ(백준) 14916번 - 거스름돈
CS/알고리즘 2021. 9. 6. 16:32

링크 https://www.acmicpc.net/problem/14916 난이도(solved.ac 참고) 실버5 풀이 5로 나눴을 때 나머지가 0이라면 i번째 값은 그냥 i를 5로 나눈 값이고, 나머지가 0이 아니라면 0이 될 때까지 2씩 빼주고 그만큼 count에 더해준다. 이제 나머지가 0이 된다면 5로 나눈 몫을 count에 더해주고 그 값을 배열에 지정해준다.

[PyPy] BOJ(백준) 1325번 - 효율적인 해킹
CS/알고리즘 2021. 9. 5. 15:01

링크 https://www.acmicpc.net/problem/1325 난이도(solved.ac 참고) 실버2 풀이 시간제한이 매우 빡빡한 문제이다. Python 3으로는 웬만해서는 맞을 수가 없고 채점 현황을 봐도 대부분이 PyPy3으로 맞았다. 일반적인 BFS문제와 크게 다르지 않은데, bfs 함수의 리턴값을 가공하는 과정이 좀 달랐다. 1부터 n+1까지의 반복문에서 각각 bfs 함수를 실행하면 각 인덱스에서 해킹할 수 있는 컴퓨터의 수가 나온다. 결과가 들어갈 result_list에는 가장 큰 값들만 들어가야하므로 거르는 과정을 거쳤다.

today i learned 9/4
카테고리 없음 2021. 9. 4. 23:53

배운 것, 공부한 것, 메모할 것 1. 알고리즘 한 문제 풀기 하고싶은 말 오늘 일정이 있어서 공부를 거의 못 했다ㅜ

[Python] BOJ(백준) 16953번 - A -> B(A → B)
CS/알고리즘 2021. 9. 3. 16:01

링크 https://www.acmicpc.net/problem/16953 난이도(solved.ac 참고) 실버1 풀이 숨바꼭질과 매우 유사한 문제이다. 그렇지만 숨바꼭질과 똑같이 풀면 메모리 초과가 뜬다. 범위가 10^9까지로 훨씬 넓기 때문이다. 그래서 count를 사용해야되는데, count를 그냥 변수로 처리하고 더해주는 방식으로 간다면 2배, 뒤에 1 붙인 모든 값에 대해 count가 더해지기 때문에 정확한 값을 도출할 수도 없다. 그래서 덱에 넣는 값에 count도 같이 넣었다. 그러면 몇 번째 연산인지 count로 구할 수 있다. x에 대해 두배한 값, 또는 뒤에 1을 붙인 값이 b를 넘지만 않는다면 전부 큐에 넣어주고 반복하다가 x가 b와 같아진다면 그 x에 대한 count를 반환하면 된다.

[Python] BOJ(백준) 4134번 - 다음 소수
CS/알고리즘 2021. 9. 3. 13:27

링크 https://www.acmicpc.net/problem/4134 난이도(solved.ac 참고) 실버5 풀이 while True 문에서 소수면 그 값을 print하고 아니면 값을 1 더해주고 다시 소수 여부를 판단하는 함수를 돌린다. 여기서 소수의 범위를 줄여줘야 했다. def is_prime(x): if x == 0 or x == 1: return False for i in range(2, x): if x % i == 0: return False return True 이렇게 하면 시간초과가 뜬다. x까지 전부 다 돌기 때문에 시간이 상당해 오래 걸린다. 8을 예로 들어보자. 8의 약수는 1, 2, 4, 8이 있다. 근데 1 * 8 = 2 * 4이다. 즉 대칭을 이룬다는 것이다. 따라서, 해당하는..

[Python] BOJ(백준) 3613번 - Java vs C++
CS/알고리즘 2021. 9. 2. 18:25

링크 https://www.acmicpc.net/problem/3613 난이도(solved.ac 참고) 실버5 풀이 이 문제는 에러를 띄우는 조건이 상당히 많다. 왜 실버5밖에 안되는지 의문인 문제였다. from string import ascii_uppercase를 한 다음에 list(ascii_uppercase)를 하면 ['A', 'B', 'C', ..., 'Z']의 리스트가 완성된다. Java에서 C++로 바꾸는 경우 (ex. isImport -> is_important) - 첫 글자가 대문자면 에러 - 대문자가 들어가면 에러 - input의 첫번째 값을 temp로 저장하고 대문자면 '_+소문자', 대문자가 아니면 그대로 넣어주면 된다. C++에서 Java로 바꾸는 경우(is_important ->..

article thumbnail
[React] 서버와의 API 통신을 통해 받은 데이터 뿌리기
Web 2021. 8. 31. 15:07

이전에 Node.js + Express 환경에서 Mock data를 만들고 API를 설계하는 일까지 해봤다. 그래서 이번에는 그렇게 설계한 API를 클라이언트 단에서 API 통신을 통해 받아온 뒤 뿌려주는 것에 대해 포스팅해보려고 한다. 우선 async-await 함수에 사용할 fetcher 함수부터 만들어보자. 1. fetcher.js import axios from 'axios'; axios.defaults.baseURL = 'http://localhost:8000'; // 혹은 본인의 서버 URL const fetcher = async (method, url, ...rest) => { const res = await axios[method](url, ...rest); return res.data }..

[Python] BOJ(백준) 5052번 - 전화번호 목록
CS/알고리즘 2021. 8. 30. 16:35

링크 https://www.acmicpc.net/problem/5052 난이도(solved.ac 참고) 골드4 풀이(오답) 처음에 접근을 잘못해서 여러번 틀렸다. sort를 한 뒤 처음 값을 기준으로 그 다음 값들부터 접두사에 처음 값이 들어가는지 여부로 판단을 했는데, 그렇게 하면 두번째 접두어가 세번째 입력의 접두어로 들어가있을 수 있기 때문에 접근이 잘못되었다. 1010 1234 12345 이런 경우가 있다고 해보면, 1010을 기준 값으로 잡고 1234부터 반복문을 진행하게 되는데, 이 경우 전부 1010이 들어가지는 않지만 1234는 12345에 들어가기때문에 NO가 나오는 게 정답이다. 근데 이전 코드대로 따르면 YES가 나왔다. 풀이(정답) 위와 같은 반례가 있을 수 있기 때문에, 저 예시의..