분류 전체보기 116

[백준] 9465 스티커

www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 문제 설명 : 스티커 점수의 최댓값 구하기 문제 풀이 : 처음에는 대각선끼리만 구한 뒤 마지막의 이전 열부터는 최댓값을 구해서 더하면 되는 줄 알았는데 완전히 틀렸습니다. 변을 공유하기 때문에 이전 대각선과 현재값을 더한 것과 이전의 전 대각선의 값과 현재값을 더한 것을 비교하여 최댓값을 구하는 방식입니다. 이전의 전 대각선을 구하는 이유는 이전 대각선을 선택하지 않을 때도 있기 때문입니다. impo..

[프로그래머스] 네트워크

programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr 문제 풀이 : 처음에 사방 탐색으로 연결된 개수를 구하려고 해서 틀렸습니다. 1 0 1 0 1 0 1 0 1 이러한 배열이 있을 때 사방 탐색으로 하면 답이 5지만 실제 답은 2입니다. 그렇기 때문에 DFS를 활용하여 N크기의 visited 배열을 만들어 모든 행의 방문 처리를 확인하면서 답을 구합니다. 방문하지 않은 배열을 DFS 로 들어가서 1. 방문처리를 해주고 2..

[백준] 11660번 구간 합 구하기 5

www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 문제 설명 : (x1,y1) 부터 (x2,y2) 까지 합을 구하기 문제 풀이 : 1. 원래의 배열에서 각 구간을 합해준 dp 배열을 만들어줍니다. ex) dp 배열의 8은 3 + 3 에서 중복된 1을 뺀 뒤에, 원래 배열의 3을 더한 것 입니다. dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + n dp[2][2] = dp[1..

[백준] 17609번 회문

www.acmicpc.net/problem/17609 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net 문제 설명 : 회문이면 0, 유사회문이면 1, 그 외는 2를 출력 문제 풀이 : 두 포인터로 문자열의 앞 부분, 뒷 부분을 각각 증가 감소 시키면서 중앙 부분에서 만날 때까지 검사합니다. 만약 회문이 아니면 left를 넘어가서 검사하거나 right를 넘어가서 검사해서 중앙 부분에서 만난다면 유사회문이 됩니다. 유사 회문은 한 문자를 삭제하는 것이 조건입니다. import java.util.Scanner; public class Main{ s..

[백준] 17413번 단어 뒤집기2

www.acmicpc.net/problem/17413 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 문제 풀이 : flag 를 이용해서 true면 역순, false면 그냥 출력이 되도록 하였습니다. tag 까지는 그냥 출력하다가 > 를 만나면 flag를 true로 두어 이후 문자열은 역순으로 출력해야하기 때문에 stack에 넣습니다. 만약 공백을 만나면 스택이 비어있을 때까지 꺼냅니다. import java.util.Scanner; import java.util.S..

[프로그래머스] 올바른 괄호

programmers.co.kr/learn/courses/30/lessons/12909 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 programmers.co.kr 문제 설명 : 올바른 괄호이면 true , 아니면 false 출력 문제 풀이 : String s 길이만큼 반복문을 돌면서 열린괄호면 스택에 push 닫힌 괄호면 pop 합니다. 하지만 이렇게만 했을 때 ())) 이러한 경우도 true가 될 수 있기 때문에, 스택이 비어있을 때 닫힌 괄호가 들어온다면 push 해주어야합니다. impo..

[프로그래머스] 단속카메라

programmers.co.kr/learn/courses/30/lessons/42884 코딩테스트 연습 - 단속카메라 [[-20,15], [-14,-5], [-18,-13], [-5,-3]] 2 programmers.co.kr 문제 설명 : 고속도로를 이동하는 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지 구하기 문제 풀이 : routes 배열에서 진출 지점을 기준으로 오름차순 정렬을 합니다. 배열의 처음 원소의 진출 지점을 temp 변수에 넣고 다음 차량의 진입 지점을 비교하면서 만약, 진출 지점보다 진입 지점이 더 큰 숫자라면 카메라를 추가 하고 temp에 진출 지점을 갱신해줍니다. 예를 들어 [[-20,15], [-14,-5], [-18,-13], [-..

[프로그래머스] 카펫

programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 programmers.co.kr 문제 설명 : 카펫의 가로 길이와 세로길이 구하기 문제 풀이 : 노란 격자의 약수를 확인하면서 구했습니다. 예를 들어 brown 가 24고 yellow가 24일 때, x를 증가시키면서 노란격자의 수와 나누어떨어지면 brown 개수인지 확인하였습니다. x y temp 1 24 54 2 12 32 3 8 26 4 6 24 -> brown 의 개수와 같기 때문에 각각 변의 길이..

[프로그래머스] 쿼드압축 후 개수 세기

programmers.co.kr/learn/courses/30/lessons/68936?language=java 코딩테스트 연습 - 쿼드압축 후 개수 세기 [[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15] programmers.co.kr 문제 풀이 : 백준 2630번 색종이 만들기와 같은 문제 szcode.tistory.com/8 class Solution { static int n,zero = 0..

[백준] 14502번 연구소

www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 문제 설명 : 2차원 배열에서 0은 빈칸, 1은 벽, 2는 바이러스 일 때 벽을 3개 세운 뒤 바이러스를 퍼지지 않은 안전 영역 크기의 최댓값을 구하기 문제 풀이 : 완전탐색으로 벽을 3개 세우고, 바이러스를 퍼뜨린 후, 안전 영역 중 최댓값을 구하면 됩니다. 2차원 배열 백트래킹으로 벽을 세워주기 위해 wall() 함수를 사용합니다. 3개의 벽을 조합하여 한 번 세웠을 때마다 safe()라는 함수로 갑니다. safe() ..