알고리즘
프로그래머스 코딩테스트 연습 Level1 - 문자열 내 p와 y의 개수 [ javascript ]
코딩테스트 연습 - 문자열 내 p와 y의 개수 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 programmers.co.kr 정규표현식을 사용해 최대한 짧게 처리해보려 했으나 (p가 없을 때, y가 없을때) false, (py 둘 다 없을 때를 다르게)true로 처리해줘야해서 조건문으로 나누었습니다. const solution = s => { if (!s.match(/[py]/gi)) return true; if (!s.match(/p/gi) || !s.match(/y/gi)) return false; return..
프로그래머스 코딩테스트 연습 Level1 - 약수의 개수와 덧셈 [ javascript ]
코딩테스트 연습 - 약수의 개수와 덧셈 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주 programmers.co.kr n의 약수는 1, x, x, x..., n 이렇게 양쪽으로 짝이 생기면서 생기고 정수의 제곱근 값이 존재하는 경우는 짝이 존재하지 않는 약수가 됩니다. 그래서 정수의 제곱근 값이 없는 경우는 약수의 개수가 짝수가 되고 정수의 제곱근이 있는 경우는 약수의 개수가 홀수가 됩니다. const solution = (left, right) => { let answer = 0; for (let i = left; i
프로그래머스 위클리 챌린지 6주차 - 복서 정렬하기 [ javascript ]
코딩테스트 연습 - 6주차 복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요 programmers.co.kr 비교할 데이터를 객체 배열로 map한 후 sort를 통해 문제의 조건에 맞게 정렬하였습니다. const winningPoint = { N: 0, L: 0, W: 1 }; const getWinningRate = head => Array.from(head).reduce((acc, winning) => (acc += winningPoint[winning]), 0) / (head.length - head.match(/N/g).lengt..
프로그래머스 코딩테스트 연습 Level2 - 단체 사진 찍기 [ Java ]
나올 수 있는 경우의 수가 8! = 40320이고 조건이 최대 100개밖에 되지 않으므로 모든 경우의 수에 대한 모든 조건을 확인한다고 해도 4032000번만 확인하면 되므로 모든 경우의수를 확인합니다. class Solution { static boolean[] visited = new boolean[127]; // 캐릭터 사용 여부 ex visitd['A'] = true : 어피치 방문함 static int[] position = new int[127]; // 캐릭터의 위치 ex position['A'] = 0 'A'는 0번에 있다. static int count = 0; static boolean check(String[] data) { for (String str : data) { char a =..
백준 1010번 다리놓기 [ Java ]
서쪽과 동쪽의 사이트를 연결하는 경우의 수를 구하기 위해선 사이트의 수가 더 많은 곳을 기준으로 잡아야 합니다. 문제에서의 예시로 보면 서쪽엔 4개 동쪽엔 7개의 사이트가 있는데 동쪽의 7개의 사이트 중에 4개를 뽑아야 하니 7C4의 연산이 나옵니다. 조합(Combination)의 연산을 하기 위해 조합의 특징중의 하나인 파스칼의 삼각형을 이용합니다. 파스칼의 삼각형 - 위키백과, 우리 모두의 백과사전 nCr = (n-1)C(r-1) + (n-1)Cr 이므로 이걸 함수로 구현하면 아래와 같이 표현할 수 있습니다. int combination(int n, int r) { if (r == 0 || n == r) return 1; return memo[n][r] = combination(n-1, r-1) + ..
백준 2529번 부등호 [ Java ]
2529번: 부등호 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제 www.acmicpc.net import java.io.*; import java.util.*; public class Main { static int k; static char[] sign; static int[] num; static ArrayList list = new ArrayList(); static boolean[] visited = new boolean[10]; public static void main(String[] args) throws IOException { BufferedReade..
백준 15661번 링크와 스타트 [ Java ]
15661번: 링크와 스타트 첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100 www.acmicpc.net 재귀로 나올 수 있는 모든 가지수를 만들어내서 isStart에 표시를 하고 start팀과 start표시가 없는 link팀을 뽑아 합산한 후 비교합니다 import java.io.*; import java.util.*; public class Main { static int N; static int M; static int[][] player; static boolean[] isStart; static int result..
백준 1476번 날짜 계산 [ Java ]
1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 각각 세 개의 변수가 반복문을 돌면서 일치하는 값을 찾도록 하였습니다. import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); int E = 0, S = 0, M =..
백준 11728번 배열 합치기 [ Java ]
11728번: 배열 합치기 첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거 www.acmicpc.net 우선순위 큐 Priority Queue를 이용하여 입력받는 동시에 정렬을 해서 출력하였습니다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in..
백준 1149번 RGB거리 [ Java ]
1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 빨강을 0 초록을 1 파랑을 2라고 생각했을때 N번째가 빨강인 최소비용은 N-1번째가 초록인 최소비용이랑 N-1번째가 파랑인 최소비용중 최솟값 + N번째의 빨강비용입니다. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRe..