본문 바로가기
  • 시 쓰는 개발자

전체 글361

12/20 스터디 15651 N과 M(3) N과 M(1) 문제와 매우 비슷한 문제였다. 애당초 N과 M 문제들 자체가 순열 조합 문제라서, 순열 조합 중복순열 중복조합으로 이해하고 접근하면 바로 풀 수 있었다. 이 문제는 순열과 똑같은 맥락에, 중복을 추가한 문제였기 때문에 순열 코드에서 중복을 제거하는 부분만 없애주면 중복을 추가해줄 수 있게 되고 그러면 중복순열을 구현할 수 있었다. 따라서 for문 안에 if i not in s부분을 지워주면 된다. 나머지 코드는 15649 N과 M(1) 문제의 코드와 동일하다. n, m = list(map(int, input().split())) s = [] def dfs(): if len(s) == m: print(' '.join(map(str, s))) return for i i.. 2022. 12. 20.
12/14 스터디 15650 N과 M(2) 앞서 풀었던 15649 문제 N과 M(1)이 순열 문제였다면, 이 문제는 조합 문제였다. 마찬가지로 combination을 쓰면 금방 풀 수 있지만 이것도 백트래킹을 활용해 풀어야한다. 순열과 조합 자체가 유사한데 한가지 다른 점은 순열은 [1,2]와 [2,1]이 다르지만 조합은 서로 같다. 이 점을 이용해서 15649 코드를 조금 변형하면 된다. n, m = list(map(int, input().split())) s = [] def dfs(start): if len(s) == m: print(' '.join(map(str, s))) return for i in range(start, n + 1): if i not in s: s.append(i) dfs(i + 1) s.pop(.. 2022. 12. 15.
헷갈리는 문법 정리 (2) - isdigit, Counter, if-else 1. python의 sort()함수는 기본적으로 stable하다.즉, 우선 순위가 같은 데이터에 대해서 정렬 후의 결과가 바뀌지 않는다.2. str.isdigit()문자열이 숫자인지 판단할 떄 isdigit() 함수를 이용하는데, 정확히는 숫자로만 이루어져있는지 확인하는 함수이다. 따라서 문자가 단 하나라도 있으면 False, 문자열의 모든 문자가 숫자로만 이루어져있으면 True를 반환한다.str.isdigit("100won") # Falsestr.isdigit("100") # True3. collections의 Counter함수★Counter는 "리스트"를 값으로 주게 되면 각 원소들이 몇 번 등장했는지 세어 딕셔너리 형태로 반환한다.from collections import Counterex1)입력 .. 2022. 12. 12.
WelcomePage란? WelcomePage란? 예전에 웰컴페이지가 Login으로 고정돼서 localhost:8080을 아무리 쳐도 login 화면만 나왔던 경험이 있었다. 그때는 오류거나 경로를 잘못 입력해서 생긴 오류였다고 생각했는데, 다시 생각해보니 그것이 바로 WelcomePage가 설정돼서 그런 거였다. // 한마디로 localhost:8080이 특정 페이지로 고정되는 것이다. 이게 설정되어있으면 localhost:8080을 쳐도 예를 들어 항상 localhost:8080/index.html 로 고정돼서 메인화면으로만 나온다거나, 로그인화면으로 고정된다거나 등의 오류아닌 오류같은 상황이 일어날 수 있다. 아래 사진의 코드처럼 자바코드로 되어있을 수도 있고, html로 path를 고정시켜놓는 경우도 있는 것 같은데 ht.. 2022. 12. 11.
쿠키와 캐시 쿠키 쿠키는 클라이언트(웹 브라우저)에 저장되는 작은 데이터 파일입니다. 웹사이트에서 로그인 정보, 사용자 환경 설정, 장바구니 등을 저장하고 다음에 같은 웹사이트를 방문할 때 사용됩니다. 이를 통해 사용자는 로그인 정보를 입력하지 않고도 다시 해당 웹사이트를 방문할 수 있습니다. 또한 쿠키는 사용자의 브라우저에서 수신된 웹 페이지에서 쿠키를 읽을 수 있습니다. 캐시 반면에 캐시는 브라우저에 의해 자동으로 생성되는 저장소이며, 최근에 방문한 웹 페이지의 일부분을 저장합니다. 이를 통해 사용자가 이전에 방문한 페이지를 더 빠르게 로드할 수 있습니다. 캐시는 브라우저에서 수신한 웹 페이지의 일부 또는 전체를 저장하고 다음에 같은 웹 페이지를 방문할 때 사용됩니다. 이는 빠른 로딩과 인터넷 대역폭을 절약할 수.. 2022. 12. 9.
12/7 스터디 1920 수 찾기 전형적인 binary search 문제였고, 이분탐색을 위해 먼저 정렬을 해주었다. 정렬 후 각 숫자들에 대해 모두 binary search 알고리즘을 적용해주었다. 이때, 한가지 다른 점은 flag를 각 숫자마다 0으로 설정해놓고 숫자를 찾으면 flag = 1, 없으면 그대로 0으로 설정을 해서 마지막에 flag 값에 따라 숫자 유무를 검사해서 1 혹은 0을 출력해주는 형식으로 진행해주었다. binary search에 대해 간단히 설명하면, 반씩 쪼개서 탐색을 하는 알고리즘인데 탈출 조건은 start와 end가 서로 엇갈리는 순간이다. 즉, start 2022. 12. 9.
12/1 스터디 11054 가장 긴 바이토닉 부분 수열 쉽게 생각하면, 11053의 LIS를 두번 적용하는 것 뿐인 문제였다. 바이토닉 부분 수열이라는 것이, 특정 element를 기점으로 쭉 증가하다가 감소하는 형태를 보이는 수열인데, 이것은 가장 긴 증가하는 부분수열과 가장 긴 감소하는 부분수열의 합쳐진 형태였기 때문이다. 가장 긴 감소하는 부분수열 문제도 있었기에 그것을 그대로 인용해도 됐지만 가장 긴 감소하는 부분수열이라는 것이 다르게 생각하면 마지막에서부터 거꾸로 올라간다면 그것도 역시 거꾸로 가장 긴 증가하는 부분수열이었기 때문에 결국 LIS를 2번 적용하되 하나는 거꾸로 적용하면 되는 형태였다. 따라서 증가하는 부분수열 increase, 감소하는 부분수열 decrease를 선언해놓고 두개를 합칠 예정인 re.. 2022. 12. 1.
11/27 스터디 11053 가장 긴 증가하는 부분 수열 [ tip ] input을 sys.stdin.readline 으로 선언해놓으면, 귀찮게 저렇게 다 안치고 input()으로만 쳐도 sys.stdin.readline을 친 것과 같은 효과를 볼 수 있다. 속설에 따름녀 sys.stdin.readline은 input보다 속도가 거의 2배 빠르다고 하므로 ... 저렇게 써서 하는 것이 좋아보인다. LIS 문제였는데, dp는 A[i]에서 가장 긴 부분수열의 길이를 넣어놓는다. 10 20 10 30 20 50 이라고 할 때 dp값은 다음과 같다. A 10 20 10 30 20 50 dp 1 2 1 3 2 4 생각보다 단순할 수 있는데, 처음에는 생각하기 어렵다. A[i]에서 자기 앞에 자기보다 작은 수가 몇개인지 세면 됐기 .. 2022. 12. 1.
11/23 스터디 10844 쉬운 계단 수 수정 예정 # 계단 수는 자리수를 하나씩 줄여도 그대로 계단 수 이어야 한다. # 즉, 자리수가 3개일 때 계단수인 수들은 자리수가 2개였어도 계단수이다. # ==>> 자리수 2개인 계단수들 중에서 하나씩 추가하는 매커니즘 # ex. 45656 => 4565 로 바뀌어도 계단수여야한다. n = int(input()) dp = [[0 for i in range(10)] for j in range(101)] # [자리수][비교 대상인 숫자] # 맨 마지막 숫자가 곧 비교대상이 되는 숫자 # 자리수 한개일 때 초기화 -->> 1~9 for i in range(1, 10): dp[1][i] = 1 # 자리수가 1일 때, 그리고 뒤에 숫자가 i인 경우에 계단수 개수가 dp값 # 자리수 2.. 2022. 11. 24.
반응형