반응형

분류 전체보기 25

[백준/파이썬]15663번 - N과 M (9) / 백트래킹

접근 방법15654번과 유사한 문제지만 중복될 수 있다는 것만 다르다.따라서 15654번의 코드를 가져와 변형하였다.중복을 잡기 위해서는 답을 찾을 때마다 출력을 했던 이전 문제와는 다르게답을 모아놓고 중복을 거르는 작업이 필요하다고 생각했다.풀이set에 답을 모아놓고 오름차순 정렬을 위해 다시 리스트로 바꾸는 과정을 거쳤다.set에는 변경불가능한 형태만 원소로 가지므로 결국 리스트 -> 튜플 -> set -> 리스트 -> sort 순으로 해결했다.여기서 문제의 해인 ans를 단순히 set인 x에 넣기위해x.add(tuple(ans))이렇게 작성한다면 얕은복사 때문에 값이 계속 변경되어 엉망이 된다.따라서 깊은 복사를 위해 copy.deepcopy()를 사용하였다.정답 코드import sysimport ..

백준 2025.04.06

[백준/파이썬]9663번 N-Queen / 백트래킹

접근 방법퀸을 놓는 문제로 백트래킹의 대표적인 문제라고 한다.따라서 재귀적으로 각각의 칸에 접근하면서 퀸을 놓을 수 없으면 바로 빠져나오면 된다. 2차원적인 문제이므로 처음에는 visited 리스트를 2차원으로 만들어야하나 싶었는데길이N의 1차원 배열을 열로 생각하고 퀸을 놓는 자리의 행을 숫자로 입력하는 방식으로 풀이한다풀이기본적인 백트래킹 방식과의 차이는 직관적으로 이차원 배열을 만들지않는 것과퀸을 놓을 수 있는 위치인지 판별하는 함수이다.백트래킹의 조건이 단순하지 않기 때문에 따로 함수로 작성하여 true, false를 반환하도록 했다퀸은 아래와 같이 1)같은열에 있는지, 2)같은 행에 있거나, 대각선에 있는지 판단해야한다.#1)if row[x] == row[i]: return False#2) ..

백준 2025.04.06

[백준/파이썬]15654번 - N과 M (5) / 백트래킹 알고리즘

접근 방법처음에 방법이 안 떠올라 알고리즘 분류를 봤고, 백트래킹이라는 것을 알았다.처음 들어보는 알고리즘에 검색을 해보았다백트래킹 : DFS를 사용하여 가능한 모든 경우를 탐색하는 과정순열이나 퍼즐 문제에 사용됨재귀 방식이나 반복문+스택으로 풀이이제 함수를 이용해 DFS방식으로 풀면 될 것 같다는 생각을 하게되었다.풀이처음 수들을 오름차순으로 정렬하고 앞에서 부터 하나씩 방문하여 깊이, 즉 수의 개수가 M과 같아지면 출력을 한다.재귀로 숫자를 하나씩 넣을때마다 깊이를 하나씩 증가시킨다.정답 코드import sysinput = sys.stdin.readlinen, m = map(int, input().split())arr = list(map(int, input().split()))arr.sort()ans..

백준 2025.04.06

[백준/파이썬]9465번 - 스티커

접근 방법다이나믹 프로그래밍의 문제로 스티커의 길이(n)가 짧을 때부터 점점 길어지는 경우를 생각하였다n이 1, 2일때는 단순히 max연산자를 사용하여 답을 낼 수 있지만 3이상인 경우 건너뛰는 자리가 생길 수 있다1 0 01 1 3 #답 : 4 따라서 3이상인 경우에는 반복문을 이용하여 합을 n까지 구해가는 방법을 사용하였다.n까지 계산을 하고 난 이후,양끝 행의 두 점수중에 하나는 무조건 합에 포함되는 것이 최대가 되므로 아래의 코드가 답을 내게 된다max(x1[n-1], x2[n-1])풀이핵심이 되는 코드는x1[i] += max(x2[i-1], x2[i-2])이와같이 이전까지의 합과 그 전까지의 합을 비교하여 큰 값만 가져가 마지막 n자리까지 합을 구한다 정답 코드import sysinput = s..

백준 2025.04.06

[JavaScript] classList 사용법

HTML요소의 class속성을 다루기위한 배열 const btn = document.querySelector("button");btn.className = "clicked";위와 같이 단순히 className을 변경할 경우 원래 있던 클래스는 무시하고 변경된 클래스만 가지게 된다.classList는 요소가 가지고 있는 클래스의 배열이다.btn.classList.contains("clicked"); //truebtn.classList.add("overed");btn.classList.remove("clicked");contains는 해당 클래스명을 가지고있는지 판단할 수 있고add와 remove로 classList에 삽입, 삭제할 수 있다.btn.classList.toggle("clicked");toggl..

언어/JavaScript 2024.11.17
반응형