Algorithm 13

[백준] 1074번 Z

https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 문제 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 크기가 2N-1 × 2N-1로 4등분 한 후에 재귀적으로 순서대로 방문한다. 다음 예는 22 × 22 크기의 배열을 방문한 순서이다. N이 주어졌을 때, r행 c열을 몇 번째..

Algorithm 2021.09.25

[프로그래머스] 오픈채팅방

2019년 카카오 블라인드채용에서 출제된 문제이다. https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 각 사용자들의 고유아이디와 변경가능한 닉네임을 매칭시키는 것이 이 문제의 핵심이다. 파이썬의 딕셔너리나, 자바의 Map 을 사용해 고유아이디 - 닉네임 쌍을 저장하면 된다. 주의할 점은, 문자열을 사용해서 답을 저장후 split 하여 배열로 만드는 것은 하면 안된다. 이렇게되면, 유저의 아이디가 다른 유저의 닉..

Algorithm 2021.08.30

[프로그래머스] 다단계 칫솔 판매

문제링크 코딩테스트 연습 - 다단계 칫솔 판매 민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후, programmers.co.kr 문제를 간단히 설명하면, 이 조직은 민호와 판매원으로 이루어져있는데, 각 판매원은 자신을 조직에 추천한 사람들과 연결되어 피라미드 구조를 가진다. 이 피라미드의 정점에는 민호가 있다. 각 판매원은 칫솔을 판매해서 발생한 수익의 10%를 자신을 조직에 추천한 사람에게 주고, 나머지를 자신이 가진다. 단, 10%를 계산할 때 원단위 이하는 버리고, 10%가 1원 미만이라면 수익은 모두 판매원이 가진다. 이 상황에서 각 판매원의 이름을 담은 배열 enr..

Algorithm 2021.08.25

[CodeGround] Practice - 미궁 속의 방

입력 첫 번째 줄에 테스트 케이스의 수 T 가 주어진다. (1≤T≤50) 각 테스트 케이스의 첫 번째 줄에는 격자의 크기 N과 경근이가 움직인 횟수 K 가 주어진다. (1≤N≤100000, 1≤K≤300000) 각 테스트 케이스의 두 번째 줄에는 경근이의 움직임이 문자열로 주어진다. 문자열은 'U', 'D', 'L', 'R'로만 이루어지며, U는 위쪽, D는 아래쪽, L은 왼쪽, R은 오른쪽으로 움직였음을 의미한다. 주어지는 입력으로 인해 경근이가 미궁을 벗어나지 않는다는 것을 보장한다. 제한시간 1초(Java 2초) 출력 각 테스트 케이스의 답을 순서대로 표준출력으로 출력하여야 하며, 각 테스트 케이스마다 첫 번째 줄에 “Case #T”를 출력하여야 한다. 이 때 T는 케이스의 번호이다. 각 테스트 케..

Algorithm 2021.07.28

[SCPC 2021] 친구들

문제설명 입력으로 n 이 주어진다. 그 후 D1 ~ Dn 까지 입력으로 주어진다. i 번 사람이 i+Di 번과 친구이고, 친구관계가 i 가 j를 친구라 생각한다면, j도 i를 친구라 생각 할 때, 친구 관계인 극대 그룹의 개수를 출력하는 문제입니다. 극대 그룹이란 "현재 이 그룹 안에서 뽑은 임의의 2명이 서로 친구이면서", "이 성질을 깨지 않고 이 그룹에 누군가를 추가할 수 없음" 을 말합니다. 정확한 문제 본문은 대회종료 후 https://www.codeground.org/ 에서 확인할 수 있을것이다. 풀이 일단, 난 알고리즘을 잘 모른다. 일단 주어진 예제 입력으로부터 규칙을 찾아봤다. 8 10 5 4 2 5 1 3 1 9 이 입력으로부터 문제 조건에 의해 총 10개의 친구관계를 알 수 있다. 입..

Algorithm 2021.07.26

백준 2579 계단 오르기

https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다. 예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다. 계단 오르는 데는 다음과 같은 규칙이 있..

Algorithm 2021.07.26

[CodeGround] Practice - 프로그래밍 경진대회

문제 삼성 프로그래밍 경진대회는 권위 있는 대회이다. 대회는 여러 라운드를 통해서 진행되며, 모든 라운드에 총 N명의 응시자가 있다. 각 라운드 별로 1등은 N점, 2등은 N−1점 순으로 순차적으로 점수를 얻게 되고 뒤에서 2등은 2점, 뒤에서 1등은 1점을 얻게 된다. 그리고 각 라운드 별로 동점자는 없으며, 각 라운드 마다 받은 점수의 합이 제일 높은 사람이 우승하게 된다. 마지막 라운드 직전까지의 점수 합이 주어졌을 때, 우승할 가능성이 있는 응시자의 수를 구하는 프로그램을 작성하시오. (SCPC 실제 대회 규칙과는 관련이 없습니다.) - 제한시간: 전체 테스트 케이스는 5개 이하이며, 전체 수행 시간은 1초 이내. (Java 2초 이내) 메모리 사용제한 heap, global, static (총계..

Algorithm 2021.07.20

[CodeGround] Practice - 숫자 골라내기

문제 초등학교교 학생인 정우와 석환이는 최근 학교에서 두 이진수의 XOR 연산에 대해 배웠다. 둘은 매우 영특한 학생이라 새로 배운 연산을 갖고 이리저리 장난치기 시작했다. 다만 석환이는 정우에게 일을 시키는 것을 좋아하는지라 다음과 같은 제안을 했다. “내가 N개의 10진수를 주면, 등장하는 숫자들 중 홀수번만 나타나는 숫자들을 모두 XOR한 결과를 구해줘.” 예를 들어 '2, 5, 3, 3' 이 주어질 경우, '2'와'5'는 1번(홀수 번) 나타나고 '3' 은 2번 (짝수 번) 나타나므로 홀수 번 나타난 '2' 와 '5'를 XOR 한 결과를 구해야 하고, '2, 5, 3, 3, 2, 4, 5, 3' 이 주어질 경우 '2' 와 '5' 는 2번 나타나고, '3' 은 3번, '4' 는 1번 나타나므로 홀수..

Algorithm 2021.07.20

백준 1874 스택수열 풀이

이 문제는, 1~n까지의 숫자를 스택의 push, pop 연산을 적당히 사용하여 주어진 수열을 만들 수 있는지 확인하고, 만들 수 있으면, push pop 하는 순서를 추력하는 문제이다. push의 경우, 첫 push 는 1이며, 그 이후 2,3,4... 오름차순으로 push된다. 이 문제의 핵심은, 스택에 만들고자하는 수열의 원소가 없으면, push를 연속으로 하고 pop을 해서 무조건 알맞은 숫자를 출력할 수 있고, 스택에 만들고자 하는 수열의 원소가 있으면, 그 원소가 top이여야만 알맞은 수열을 만들 수 있다는 사실이다. package test; import java.util.*; public class Main{ public static void main(String[] args){ Scanne..

Algorithm 2020.09.30

백준 11729 하노이탑 이동 순서 문제 풀이

하노이탑은 결국, n-1개의 블록을 1번 기둥에서 2번 기둥으로 옮기는 것 + n번째 블록을 1번 블록에서 3번 블록으로 옮기는 것 + n-1개의 블록을 2번기둥에서 3번 기둥으로 옮기는 것 으로 정의된다. 총 이동 횟수는 2^n - 1 번 이다. 각 라인을 그때마다 출력한느 것이 아니라, StringBuffer를 이용해 저장한 후 마지막에 한번에 출력해야 시간초과가 안난다. import java.util.*; public class Main{ private static StringBuffer sb = new StringBuffer(); private static void f(int n,int from, int tmp, int to) { if(n==1) { sb.append(from+" "+to+"\n"..

Algorithm 2020.09.27