Loading...

[프로그래머스] 후보키 (javascript)

* 2021-04-13 다시 푼 풀이 function solution(relation) { var answer = 0; let rlen=relation.length; let clen=relation[0].length; const subset=[]; const set=new Set();//인덱스 조합 function comb(cnt,max,start){ if(cnt===max){ // 최소성 확인 (인덱스 중복 검사) let minimum=true; let sarr=Array.from(set); for(let i=0;i

[프로그래머스] 메뉴 리뉴얼 (javascript)

하루종일 풀었다 휴 원래는 course 배열의 for문을 가장 바깥으로 하여 중첩 포문을 돌렸는데 시간 초과가 나서 조합을 따로 구해주고 모든 조합이 구해진 후 최대값을 갱신해주는 방식으로 중첩 for문을 분리시켰다. function solution(orders, course) { var answer = []; orders.sort((a,b)=>a.length-b.length); //크기 별로 정렬해놓는다. let dict={}; //조합의 결과가 들어갈 것이다. (문자열, 등장횟수)쌍 function comb(idx, s,len, str, visited,start){ //조합을 돌린다. if(idx===len){ //기준 길이(course[i]) str=str.split("").sort().join("..

[백준] 17135번 캐슬 디펜스 (java)

www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 어디가 틀린지 찾느라 힘들었다... 1. 궁수의 위치는 nC3으로 배치해 놓은 다음 가장 많은 적을 처치하는 경우는 언제인지를 찾는다. 2. 성의 위치(행) castle을 n으로 놓고 성이 점점 위로 올라가는 것처럼 1씩 줄인다. castle-=1 왼쪽부터 검사해서 길이가 최소이면 해당 위치를 저장해놓고 모든 행을 봤을 때 길이가 가장 작았던 곳을 enemy 배열에 추가한다. 여러 궁수가 같은 적을 공격할 수 있기 때문에..

[백준] 3040번 백설 공주와 일곱 난쟁이

www.acmicpc.net/problem/3040 3040번: 백설 공주와 일곱 난쟁이 매일 매일 일곱 난쟁이는 광산으로 일을 하러 간다. 난쟁이가 일을 하는 동안 백설공주는 그들을 위해 저녁 식사를 준비한다. 백설공주는 의자 일곱개, 접시 일곱개, 나이프 일곱개를 준비한다. www.acmicpc.net 사실 이중 포문으로 풀면 되는데 (아닌 2명만 찾으면 됨) 조합으로 해보라는거 같아서 조합으로 풀었다 import java.util.Scanner; public class Main { static int height[]=new int[9]; static boolean v[]=new boolean[9]; static int sum; public static void main(String[] args) {..

[swexpert] 9229. 한빈이와 Spot Mart (D3, java)

조합 문제이다. nC2를 구하면 된다. import java.util.Scanner; public class Solution { static int t; static int n,m; static int[] snack; static int answer; public static void main(String[] args) { Scanner sc=new Scanner(System.in); t=sc.nextInt(); for (int tc = 1; tc

[백준] 1010번 다리놓기 (실버)

m >=n 일 때 n개의 다리를 놓을 수 있는 경우의 수를 구하는 문제이다. n만큼 뽑아서 순서대로 놓으면 되기 때문에 조합의 수를 구하면 된다. 1. 내 풀이 5C2의 경우 n=2이고 m=5 이다. n 의 개수만큼 5*4 5부터 1씩 빼면서 곱해주고 거기서 다시 n인 2부터 n의 개수만큼만 곱한 수를 나눠주면 된다 다시 말하면 5*4 / 2*1 이 답이다. n=3인 경우는 3개씩이니까 5*4*3 / 3*2*1 이다. import sys input=sys.stdin.readline t=int(input()) for _ in range(t): n, m = map(int, input().split()) answer=1; mm=m; for _ in range(n): answer*=mm mm-=1 for i i..