[프로그래머스] [2020 카카오 인턴십] 키패드 누르기

[프로그래머스] [2020 카카오 인턴십] 키패드 누르기

출처: [2020 카카오 인턴십] 키패드 누르기


문제

스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.

kakao_phone1.png

이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.

  1. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.
  2. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다.
  3. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다.
  4. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.
    4-1. 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다.

순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.


제한

  • numbers 배열의 크기는 1 이상 1,000 이하입니다.

  • numbers 배열 원소의 값은 0 이상 9 이하인 정수입니다.

  • hand는

    1
    "left"

    또는

    1
    "right"

    입니다.

    • "left"는 왼손잡이, "right"는 오른손잡이를 의미합니다.
  • 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 return 해주세요.


입출력

numbers hand result
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL"
[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR"
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

입출력 예 1

순서대로 눌러야 할 번호가 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]이고, 오른손잡이입니다.

왼손 위치 오른손 위치 눌러야 할 숫자 사용한 손 설명
* # 1 L 1은 왼손으로 누릅니다.
1 # 3 R 3은 오른손으로 누릅니다.
1 3 4 L 4는 왼손으로 누릅니다.
4 3 5 L 왼손 거리는 1, 오른손 거리는 2이므로 왼손으로 5를 누릅니다.
5 3 8 L 왼손 거리는 1, 오른손 거리는 3이므로 왼손으로 8을 누릅니다.
8 3 2 R 왼손 거리는 2, 오른손 거리는 1이므로 오른손으로 2를 누릅니다.
8 2 1 L 1은 왼손으로 누릅니다.
1 2 4 L 4는 왼손으로 누릅니다.
4 2 5 R 왼손 거리와 오른손 거리가 1로 같으므로, 오른손으로 5를 누릅니다.
4 5 9 R 9는 오른손으로 누릅니다.
4 9 5 L 왼손 거리는 1, 오른손 거리는 2이므로 왼손으로 5를 누릅니다.
5 9 - -

따라서 "LRLLLRLLRRL"를 return 합니다.


입출력 예 2

왼손잡이가 [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2]를 순서대로 누르면 사용한 손은 "LRLLRRLLLRR"이 됩니다.


입출력 예 3

오른손잡이가 [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]를 순서대로 누르면 사용한 손은 "LLRLLRLLRL"이 됩니다.


풀이

  • 각 번호를 좌표로 만들고, 두 점 사이의 거리를 이용한다.

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
def solution(numbers, hand):
number_coord = [(3, 1), (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
left_hand = (3, 0)
right_hand = (3, 2)
answer = ''

for number in numbers:
if number in [1, 4, 7]:
answer += 'L'
left_hand = number_coord[number]
elif number in [3, 6, 9]:
answer += 'R'
right_hand = number_coord[number]
elif number in [2, 5, 8, 0]:
# 다음 pos의 좌료와 현재 양손의 좌표사이의 거리 구하기
next_x, next_y = number_coord[number]
left_x, left_y = left_hand
right_x, right_y = right_hand
# abs(x_h - x_n) + abs(y_h - y_n)

left_distance = abs(next_x - left_x) + abs(next_y - left_y)
right_distance = abs(next_x - right_x) + abs(next_y - right_y)
if left_distance < right_distance:
answer += 'L'
left_hand = number_coord[number]
elif left_distance == right_distance:
if hand == 'right':
answer += 'R'
right_hand = number_coord[number]
else:
answer += 'L'
left_hand = number_coord[number]
else:
answer += 'R'
right_hand = number_coord[number]
return answer
[백준] 10844번 쉬운 계단 수

[백준] 10844번 쉬운 계단 수

출처: [백준] 10844번 쉬운 계단 수


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 256 MB 77392 23572 16910 28.505%

문제

45656이란 수를 보자.

이 수는 인접한 모든 자리수의 차이가 1이 난다. 이런 수를 계단 수라고 한다.

세준이는 수의 길이가 N인 계단 수가 몇 개 있는지 궁금해졌다.

N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. (0으로 시작하는 수는 없다.)


입력

첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.


출력

첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.


예제 입력 1

1
1

예제 출력 1

1
9

예제 입력 2

1
2

예제 출력 2

1
17

힌트


출처


알고리즘 분류


시간 제한


풀이


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys

input = sys.stdin.readline

dp = [[1 for _ in range(10)]]
for i in range(99):
dp.append([0 for _ in range(10)])

for i in range(99):
for j in range(10):
if 1 <= j < 9:
dp[i + 1][j] = dp[i][j - 1] + dp[i][j + 1]
elif j >= 9:
dp[i + 1][j] = dp[i][j - 1]
elif j <= 0:
dp[i + 1][j] = dp[i][j + 1]
# print(dp)
n = int(input())
print((sum(dp[n - 1]) - dp[n - 1][0]) % 1000000000)
[백준] 1436번 영화감독 숌

[백준] 1436번 영화감독 숌

출처: [백준] 1436번 영화감독 숌


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 31210 13703 11247 44.456%

문제

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다.

하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.

종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, …. 과 같다.

따라서, 숌은 첫 번째 영화의 제목은 세상의 종말 666, 두 번째 영화의 제목은 세상의 종말 1666 이렇게 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 숫자) 와 같다.

숌이 만든 N번째 영화의 제목에 들어간 숫자를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.


입력

첫째 줄에 숫자 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.


출력

첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.


예제 입력 1

1
2

예제 출력 1

1
1666

힌트


출처

  • 문제를 번역한 사람: baekjoon
  • 어색한 표현을 찾은 사람: mwy3055

알고리즘 분류


시간 제한


풀이

  • 666,1666,2666,3666,4666,5666,6660,6661…….

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys

input = sys.stdin.readline

N = int(input())

title = 666
cnt = 0
while True:
if '666' in str(title):
cnt += 1
if cnt == N:
print(title)
break
title += 1

2021년 4월 14일 수요일 IT뉴스

1. 네이버·카카오 新사업 질주…비결은 M&A ‘스타트업 군단’

네이버·카카오 新사업 질주…비결은 M&A ‘스타트업 군단’ : 네이버 뉴스 (naver.com)

카카오엔터프라이즈는 지난해 인수한 스타트업인 리모트몬스터의 기술을 활용하여 1인 방송, 실시간 온라인 방송, 화상 회의, 웨비나, 라이브커머스까지 모든 생중계 동영상을 쉽게 유통할 수 있는 클라우드 기반의 라이브 스트리밍 플랫폼인 ‘카카오 i 커넥트 라이브’를 최근 내놨다

네이버는 인재 확보를 위해 스타트업을 사들이고 있으며, 네이버는 지난해 서울대 석·박사 출신들이 설립한 컴퓨터 비전 분야의 인공지능(AI) 스타트업인 비닷두를 인수하여 이들은 네이버웹툰의 콘텐츠 경쟁력을 강화하기 위해 여러 웹툰 관련 기술을 고도화하고 있다.


2. 북미서 웹툰 전쟁…유튜브식 네이버, 넷플릭스식 카카오?

북미서 웹툰 전쟁…유튜브식 네이버, 넷플릭스식 카카오? : 네이버 뉴스 (naver.com)

*북미서 웹툰 전쟁*

웹툰은 한국에서 시작해 일본과 동남아 각국에서 카카오와 네이버의 웹툰 플랫폼이 만화앱 매출 1위를 다투고 있을 정도로 해외에서 인증받은 콘텐트이며, 특히 이들 플랫폼이 작심하고 만든 ‘자체 IP’의 수익성이 탁월하다.

네이버·카카오 모두 국내 최대 플랫폼사이며, 플랫폼에 모여든 창작자와 사용자가 많으면 많을수록, 플랫폼 수익도 늘어난다는 걸 누구보다 잘 알고 있기 때문에 전세계 각국 웹툰·웹소설 이용자의 구미에 맞는 콘텐트를 다양하게 구비할 수 있다면, ‘웹툰계의 넷플릭스’ 혹은 ‘웹툰계의 유튜브’가 되지 말란 법 없다. 더 넓게는, 유튜브처럼 웹툰 소비자를 창작자로 끌어 들여 ‘웹툰 크리에이터 플랫폼’을 만들 수도 있다. 어느 쪽이든 콘텐트와 사용자가 많을수록 플랫폼 이익도 커진다.

  • 왓패드: 웹소설계의 유튜브다. 아마추어 작가가 자유롭게 작품을 올리고, 독자에게 선택을 많이 받으면 히트작이 된다. 대부분 무료 작품이란 점까지, 네이버 도전만화와 비슷하다. 누구나 들어올 수 있게 판을 깔고 소비자 선택을 지켜보는 네이버의 플랫폼 전략과 닮았다.
  • 래디쉬: 프로페셔널 작가군단이 데이터 기반으로 ‘히트작’만 골라쓴다. 인기 많은 작품일수록 연재횟수를 빠르게 늘리는 등 ‘미리보기’에 기꺼이 지갑을 여는 코어 팬덤을 구축하는 데 능하다. 자체 IP(오리지널)에 투자하고 콘텐트 값을 받는 넷플릭스와 유사하다.

3. 유튜브뮤직 VS 지니뮤직, 음원시장 2위 놓고 치열한 경쟁

유튜브뮤직 VS 지니뮤직, 음원시장 2위 놓고 치열한 경쟁 : 네이버 뉴스 (naver.com)

*사진 설명*

지니뮤직과 유튜브 뮤직이 음원업계 2위 자리를 놓고 치열한 경쟁을 벌이고 있다. 특히 유튜브 뮤직이 유튜브 프리미엄을 등에 앞세워 빠른 속도로 이용자를 확보하면서 2위 다툼에 불을 붙였다.

업계 한 관계자는 “음악 스트리밍 서비스는 온라인동영상서비스(OTT)와 달리 하나의 앱을 쓰는 경우가 대부분”이라며 “가격 경쟁력을 갖춘 유튜브 뮤직의 성장세가 워낙 가팔라 음원 업계 모두가 예의주시 하고 있다”고 말했다.


4. “DSLR 아냐?”… 갤럭시S22 ‘더 커진’ 카메라 탑재

“DSLR 아냐?”… 갤럭시S22 ‘더 커진’ 카메라 탑재 : 네이버 뉴스 (naver.com)

img삼성전자가 차세대 갤럭시폰에서 올림푸스 카메라를 탑재할 것이라는 전망이 나왔다. 사진은 갤럭시S22 렌더링이미지. /사진제공=렛츠고디지털

12일(현지시각) 네덜란드 IT매체 렛츠고디지털은 삼성전자가 갤럭시 이용자의 모바일 사진 경험을 개선하기 위해 일본 카메라 업체 ‘올림푸스’와 파트너를 맺을 것이라고 밝혔다.

삼성전자가 개발 중인 새로운 엑시노스 프로세서의 코드명이 ‘올림푸스’라고 알려진 것도 양사 간 협업설에 신빙성을 더했고, 삼성전자는 지난 1월 ‘엑시노스 온’ 온라인 행사를 개최해 최대 2억 화소 이미지까지 처리할 수 있는 고성능 ISP(이미지처리장치)를 갖춘 2021년형 프리미엄 모바일AP ‘엑시노스 2100’를 소개했다.


5. 네이버-카카오, 1Q 실적도 ‘맑음’…비대면 수혜 ‘쏠쏠’

네이버-카카오, 1Q 실적도 ‘맑음’…비대면 수혜 ‘쏠쏠’ : 네이버 뉴스 (naver.com)

경기도 성남시 분당구 네이버 그린팩토리 본사.ⓒ네이버

국내 양대 포털업체인 네이버와 카카오가 올해 1분기 비대면 수혜로 실적 상승세를 이어갈 전망이고, 신종 코로나바이러스 감염증(코로나19) 여파로 이커머스·콘텐츠·금융 등 생활 전반을 아우르는 ‘생활 밀착형 플랫폼’으로 진화하면서 관련 사업도 빠른 속도로 성장하고 있다.

콘텐츠 사업은 네이버가 확보한 지식재산권(IP)을 기반으로 성장을 이어가고 있고 지난해 네이버 웹툰 거래액은 8200억원으로 8000억원이었던 원래 목표를 초과했으며, 월간활성이용자수(MAU)도 7200만명으로 역대 최고치를 달성했고 특히 회사는 올해 글로벌 1위 웹소설 플랫폼 왓패드 인수를 통한 시너지 효과를 기대하고 있다.


6. “구글도 뉴스 사용료 내라”…’한국판 구글법’ 발의된다

“구글도 뉴스 사용료 내라”…’한국판 구글법’ 발의된다 : 네이버 뉴스 (naver.com)

네이버, 카카오 등 국내 포털은 자율적인 협상을 통해 뉴스 저작권료(전재료) 또는 광고 수익 일부를 언론사에 지급하고 있는 반면 구글·페이스북 등 글로벌 인터넷 플랫폼은 한국 언론의 뉴스를 이용해 많은 광고 수익을 올리면서도 전혀 대가를 지불하지 않고 있음에 따라 정치권이 뉴스 저작권료 지급을 강제하는 이른바 ‘구글법’ 제정에 나선 것이다.

이종관 법무법인 세종 전문위원은 “개정법안의 취지에는 찬성하지만, 호주에서의 입법례는 구글 페이스북이 가진 시장지배력을 견제하는 차원에서 마련되었으며, 이는 국내 상황과 다르다”며 “한국판 구글법을 통해서는 수천개의 언론사와 포털간의 협상을 어떻게 할지 등 난제가 있다”라는 부정적 의견또한 나왔다.

[백준] 2447번 별 찍기-10

[백준] 2447번 별 찍기-10

출처: [백준] 2447번 별 찍기-10


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 37375 17060 13949 46.314%

문제

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, …)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.

크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.

1
2
3
***
* *
***

N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.


입력

첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.


출력

첫째 줄부터 N번째 줄까지 별을 출력한다.


예제 입력 1

1
27

예제 출력 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
***************************
* ** ** ** ** ** ** ** ** *
***************************
*** ****** ****** ***
* * * ** * * ** * * *
*** ****** ****** ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
********* *********
* ** ** * * ** ** *
********* *********
*** *** *** ***
* * * * * * * *
*** *** *** ***
********* *********
* ** ** * * ** ** *
********* *********
***************************
* ** ** ** ** ** ** ** ** *
***************************
*** ****** ****** ***
* * * ** * * ** * * *
*** ****** ****** ***
***************************
* ** ** ** ** ** ** ** ** *
***************************

힌트


출처

  • 문제를 만든 사람: baekjoon
  • 문제를 다시 작성한 사람: jh05013

알고리즘 분류


시간 제한


풀이

  • 1, 4, 7, 10, 13, 16, 19, 22, 25 …. 3으로 나눈 나머지가 1인 부분이 공백
  • 전체를 봤을때, 3줄씩 한 세트라고 하면, 3, 4, 5, 12, 13, 14, 21, 22, 23…. (n//3)%3==1인 부분이 공백

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys

input = sys.stdin.readline

N = int(input())
arr = [['*'] * N for _ in range(N)] # output array 생성

temp = N
cnt = 0
while temp != 1: # 입력받은 n이 3의 몇승?
temp /= 3
cnt += 1


'''
1, 4, 7, 10, 13, 16, 19, 22, 25 .... 3으로 나눈 나머지가 1인 부분이 공백
전체를 봤을때, 3줄씩 한 세트라고 하면, 3, 4, 5, 12, 13, 14, 21, 22, 23.... (n//3)%3==1인 부분이 공백
'''
for i in range(cnt):
idx = []
for j in range(N):
if (j // 3 ** i) % 3 == 1:
idx.append(j)
for row in idx:
for col in idx:
arr[row][col] = ' '

print('\n'.join([''.join([str(i) for i in row]) for row in arr]))

[백준] 1018번 체스판 다시 칠하기

[백준] 1018번 체스판 다시 칠하기

출처: [백준] 1018번 체스판 다시 칠하기


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 37375 17060 13949 46.314%

문제

지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 MN 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 88 크기의 체스판으로 만들려고 한다.

체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다.

보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8x8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8x8 크기는 아무데서나 골라도 된다. 지민이가 다시 칠해야 하는 정사각형의 최소 개수를 구하는 프로그램을 작성하시오.


입력

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.


출력

첫째 줄에 지민이가 다시 칠해야 하는 정사각형 개수의 최솟값을 출력한다.


예제 입력 1

1
2
3
4
5
6
7
8
9
8 8
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBBBWBW
WBWBWBWB
BWBWBWBW
WBWBWBWB
BWBWBWBW

예제 출력 1

1
1

예제 입력 2

1
2
3
4
5
6
7
8
9
10
11
10 13
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
WWWWWWWWWWBWB
WWWWWWWWWWBWB

예제 출력 2

1
12

힌트


출처

  • 문제를 번역한 사람:
  • 데이터를 추가한 사람:
  • 문제를 다시 작성한 사람: jh05013

알고리즘 분류


시간 제한


풀이


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import sys

input = sys.stdin.readline

N, M = map(int, input().split())
board = [list(input().rstrip()) for _ in range(N)]


def check_BW(slice_board):
# print(slice_board)
black_cnt = 0 # black 시작 [bwbwbwbw],[wbwbwbwb]
for row in range(8):
for col in range(8):
if (row % 2 == 0 and col % 2 == 0) or (row % 2 == 1 and col % 2 == 1):
if slice_board[row][col] != "B":
black_cnt += 1
if (row % 2 == 0 and col % 2 == 1) or (row % 2 == 1 and col % 2 == 0):
if slice_board[row][col] != "W":
black_cnt += 1

white_cnt = 0 # white 시작 [wbwbwbwb],[bwbwbwbw]
for row in range(8):
for col in range(8):
if (row % 2 == 0 and col % 2 == 0) or (row % 2 == 1 and col % 2 == 1):
if slice_board[row][col] != "W":
white_cnt += 1
if (row % 2 == 0 and col % 2 == 1) or (row % 2 == 1 and col % 2 == 0):
if slice_board[row][col] != "B":
white_cnt += 1

return min(black_cnt, white_cnt)


check = []
for row in range(N - 7):
for col in range(M - 7):
cnt1, cnt2 = 0, 0
# 체스판 경우의 수 slicing
c = [board[row + i][col:col + 8] for i in range(8)]
# c = [c[(0 + col):(8 + col)] for c in board[(0 + row):(8 + row)]]
check.append(check_BW(c))
print(min(check))

2021년 4월 12일 월요일 IT뉴스

1. [단독] 카카오, 북미 최초웹툰 타파스 인수…美서 네이버와 격돌

[단독] 카카오, 북미 최초웹툰 타파스 인수…美서 네이버와 격돌 - 매일경제 (mk.co.kr)

img

카카오가 웹소설 플랫폼 래디쉬와 함께 북미 콘텐츠 시장을 본격 공략하기 위해서 콘텐츠 자회사 카카오엔터테인먼트를 통해 북미 첫 웹툰 플랫폼을 운영하는 타파스미디어 경영권 인수를 추진한다.

카카오 군단이 북미로 출격을 준비하면서, 네이버와의 콘텐츠 경쟁도 더욱 치열해질 전망이며, 국내에선 양 사가 웹툰, 웹소설, 음악, 영상까지 전방위적인 경쟁을 벌이고 있고 세계 최대 만화 시장인 일본에선 후발 주자로 시작한 카카오가 자회사 카카오재팬의 콘텐츠 플랫폼 픽코마를 앞세워 라인망가(네이버의 일본 웹툰 서비스)를 제치고 매출 기준 1위를 차지했다.

  • 타파스: 김창원 대표가 2012년 미국에서 설립한 타파스미디어는 북미 최초 웹툰 플랫폼 타파스를 운영하고 있다.

2. 당근마켓, 일주일에 천만명 넘게 쓴다…93%가 구매자 겸 판매자

당근마켓, 일주일에 천만명 넘게 쓴다…93%가 구매자 겸 판매자 : 네이버 뉴스 (naver.com)

12일 당근마켓에 따르면, 이 앱은 지난달 기준으로 주간 활성 이용자 수(WAU·Weekly Active Users)가 1천만명을 돌파했다.

당근마켓 김용현 공동대표는 “환경과 자원 재사용의 중요성도 커지면서 어느덧 중고 거래 이용자 1천만명 시대가 열렸다”며 “지역의 가치 있는 정보·소식을 연결하고 생활 편의를 높이는 하이퍼로컬 시장의 선두 주자로 혁신을 거듭할 것”이라고 말했다.


3. 클럽하우스, 차세대 SNS 아닌 ‘반짝’이었다…”Z세대 놓친 탓”

클럽하우스, 차세대 SNS 아닌 ‘반짝’이었다…”Z세대 놓친 탓” : 네이버 뉴스 (naver.com)

‘신드롬’에 가까운 반응을 자아내며 혜성처럼 등장했던 오디오 소셜미디어(SNS) ‘클럽하우스’가 약 두 달 만에 이용자들의 외면을 받고 있고, 12일 IT업계에 따르면, 클럽하우스는 3월 이후로 국내 활성 이용자(Active Users)가 대폭 줄어든 상태다.

전문가들은 클럽하우스가 iOS용만 있고 아직도 안드로이드용 앱을 내놓지 않은 것이 인기 하락의 기본적인 이유라고 입을 모으며, SNS 전문가들은 클럽하우스가 ‘Z세대’(Gen Z·Generation Z)를 잡지 못한 것이 부진 요인의 핵심이라고 말한다.


4. [나는개발자다] 게임 공략법 분석하던 유튜버, 샌드박스 ‘개발리더’ 되다

[나는개발자다] 게임 공략법 분석하던 유튜버, 샌드박스 ‘개발리더’ 되다 : 네이버 뉴스 (naver.com)

img

지난 8일 서울 용산구 샌드박스 본사에서 만난 노성산 샌드박스 CX·CT팀 총괄 디렉터(팀장)<사진>는 샌드박스 개발자의 첫 번째 덕목으로 미디어와 콘텐츠에 대한 애착을 꼽았다. MCN 소속으로서 당연하다고 하면 당연할 수 있겠지만, 기술력 바탕의 개발 중심 조직에 익숙한 개발자들이라면 다소 의아해 할 수 있는 답변이다.

노 팀장은 “능력 좋고 코드를 잘 짜는 개발자들과도 일해봤지만 오히려 개발만 생각하다보면 비즈니스에 독이 되는 경우를 많이 봤다”며 **“우리 팀의 가장 이상적인 그림은 신입사원이라도 개발자 한명 한명이 자신이 맡은 프로젝트에 대해서는 모두가 창업자 정신으로 오너십을 가지는 것”**이라고 강조했다.

  • CS: 고객경험, 서비스
  • CT: 문화콘텐츠 기술

5. 넷플릭스는 왜 스파이더맨 붙잡았을까…콘텐츠 투자 가속페달

넷플릭스는 왜 스파이더맨 붙잡았을까…콘텐츠 투자 가속페달 : 네이버 뉴스 (naver.com)

img

넷플릭스는 온라인동영상서비스(OTT) 시장 경쟁자인 디즈니플러스와 HBO, 애플TV, 아마존프라임 등의 견제와 공세에 대응하려면 ‘콘텐츠 확보만이 살 길’이라는 판단을 내려, 스파이더맨과 베놈 등을 거느린 소니픽처스와 손잡고 콘텐츠 투자에 가속 페달을 밟는다.

넷플릭스는 코로나19 반사이익으로 얻은 성장기가 끝나가는 만큼 내실을 다지겠다는 것으로 과감한 콘텐츠 투자와 함께 요금인상으로 수익성 강화에도 본격적으로 나서고 있다.


6. [개발자 쟁탈전]② 판교역 ‘이직의 다리’를 아시나요?

[개발자 쟁탈전]② 판교역 ‘이직의 다리’를 아시나요? : 네이버 뉴스 (naver.com)

img판교역 지상 ‘이직의 다리’로 불리는 공중 연결통로. /사진 = 장도민 기자 © 뉴스1

판교에는 ‘이직의 다리’라고 불리는 판교역 지상에 위치한 크래프톤타워와 알파돔타워를 연결해주는 공중 연결통로가 있다.

네이버와 넥슨, 크래프톤, 엔씨소프트 등 대형 IT기업들이 줄줄이 ‘개발자 모시기’에 나서면서 최근 ‘귀하신 몸’이 된 개발자들의 위상이 날로 높아지고 있기 때문에 최근 판교에는 개발자들을 중심으로 이직의 다리를 건너려는 분위기가 확산될 조짐이 보인다.

[백준] 18869번 멀티버스Ⅱ

[백준] 18869번 멀티버스Ⅱ

출처: [백준] 18869번 멀티버스Ⅱ


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 (추가 시간 없음) 512 MB 292 85 64 46.715%

문제

M개의 우주가 있고, 각 우주에는 1부터 N까지 번호가 매겨진 행성이 N개 있다. 행성의 크기를 알고 있을때, 균등한 우주의 쌍이 몇 개인지 구해보려고 한다. 구성이 같은데 순서만 다른 우주의 쌍은 한 번만 센다.

두 우주 A와 B가 있고, 우주 A에 있는 행성의 크기는 A1, A2, …, AN, 우주 B에 있는 행성의 크기는 B1, B2, …, BN라고 하자. 두 우주의 행성 크기가 모든 1 ≤ i, j ≤ N에 대해서 아래와 같은 조건을 만족한다면, 두 우주를 균등하다고 한다.

  • Ai < Aj → Bi < Bj
  • Ai = Aj → Bi = Bj
  • Ai > Aj → Bi > Bj

입력

첫째 줄에 우주의 개수 M과 각 우주에 있는 행성의 개수 N이 주어진다. 둘째 줄부터 M개의 줄에 공백으로 구분된 행성의 크기가 한 줄에 하나씩 1번 우주부터 차례대로 주어진다.


출력

첫째 줄에 균등한 우주의 쌍의 개수를 출력한다.


제한

  • 2 ≤ M ≤ 100
  • 3 ≤ N ≤ 10,000
  • 1 ≤ 행성의 크기 ≤ 1,000,000

예제 입력 1

1
2
3
2 3
1 3 2
12 50 31

예제 출력 1

1
1
  • (A, B) = (1, 2)
    • A1 = 1 < A2 = 3 이고, B1 = 12 < B2 = 50
    • A1 = 1 < A3 = 2 이고, B1 = 12 < B3 = 31
    • A2 = 3 > A3 = 2 이고, B2 = 50 > B3 = 31
  • 모든 1 ≤ i, j ≤ N에 대해서 만족한다.

예제 입력 2

1
2
3
2 3
1 3 2
12 50 10

예제 출력 2

1
0
  • (A, B) = (1, 2)
    • A1 = 1 < A3 = 2 인데, B1 = 12 > B3 = 10이다.
  • 모든 1 ≤ i, j ≤ N에 대해서 만족하지 않는다.

예제 입력 3

1
2
3
4
5
6
5 3
20 10 30
10 20 60
80 25 79
30 50 80
80 25 81

예제 출력 3

1
2
  • 1번과 5번 우주, 2번과 4번 우주가 균등하다.

힌트


출처


알고리즘 분류


시간 제한


풀이


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys

input = sys.stdin.readline

M, N = map(int, input().split())

space_list = [list(map(int, input().split())) for _ in range(M)]

new_space_list = [[] for _ in range(M)]
dictionary = {}
for i in range(M):
new_list = sorted(list(set(space_list[i])))
for j in range(len(new_list)):
dictionary[new_list[j]] = j
for x in (space_list[i]):
new_space_list[i].append(dictionary[x])

new_space_list.sort()
cnt, ans = 1, 0
for i in range(1, M):
if new_space_list[i] == new_space_list[i - 1]:
cnt += 1
else:
ans += cnt * (cnt - 1) // 2
cnt = 1

ans += cnt * (cnt - 1) // 2
print(ans)

[백준] 18868번 멀티버스Ⅰ

[백준] 18868번 멀티버스Ⅰ

출처: [백준] 18868번 멀티버스Ⅰ


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 (추가 시간 없음) 512 MB 882 494 293 62.876%

문제

M개의 우주가 있고, 각 우주에는 1부터 N까지 번호가 매겨진 행성이 N개 있다. 행성의 크기를 알고 있을때, 균등한 우주의 쌍이 몇 개인지 구해보려고 한다. 구성이 같은데 순서만 다른 우주의 쌍은 한 번만 센다.

두 우주 A와 B가 있고, 우주 A에 있는 행성의 크기는 A1, A2, …, AN, 우주 B에 있는 행성의 크기는 B1, B2, …, BN라고 하자. 두 우주의 행성 크기가 모든 1 ≤ i, j ≤ N에 대해서 아래와 같은 조건을 만족한다면, 두 우주를 균등하다고 한다.

  • Ai < Aj → Bi < Bj
  • Ai = Aj → Bi = Bj
  • Ai > Aj → Bi > Bj

입력

첫째 줄에 우주의 개수 M과 각 우주에 있는 행성의 개수 N이 주어진다. 둘째 줄부터 M개의 줄에 공백으로 구분된 행성의 크기가 한 줄에 하나씩 1번 우주부터 차례대로 주어진다.


출력

첫째 줄에 균등한 우주의 쌍의 개수를 출력한다.


제한

  • 2 ≤ M ≤ 10
  • 3 ≤ N ≤ 100
  • 1 ≤ 행성의 크기 ≤ 10,000

예제 입력 1

1
2
3
2 3
1 3 2
12 50 31

예제 출력 1

1
1
  • (A, B) = (1, 2)
    • A1 = 1 < A2 = 3 이고, B1 = 12 < B2 = 50
    • A1 = 1 < A3 = 2 이고, B1 = 12 < B3 = 31
    • A2 = 3 > A3 = 2 이고, B2 = 50 > B3 = 31
  • 모든 1 ≤ i, j ≤ N에 대해서 만족한다.

예제 입력 2

1
2
3
2 3
1 3 2
12 50 10

예제 출력 2

1
0
  • (A, B) = (1, 2)
    • A1 = 1 < A3 = 2 인데, B1 = 12 > B3 = 10이다.
  • 모든 1 ≤ i, j ≤ N에 대해서 만족하지 않는다.

예제 입력 3

1
2
3
4
5
6
5 3
20 10 30
10 20 60
80 25 79
30 50 80
80 25 81

예제 출력 3

1
2
  • 1번과 5번 우주, 2번과 4번 우주가 균등하다.

힌트


출처


알고리즘 분류


시간 제한


풀이


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys

input = sys.stdin.readline

M, N = map(int, input().split())

space_list = [list(map(int, input().split())) for _ in range(M)]

new_space_list = [[] for _ in range(M)]
dictionary = {}
for i in range(M):
new_list = sorted(list(set(space_list[i])))
for j in range(len(new_list)):
dictionary[new_list[j]] = j
for x in (space_list[i]):
new_space_list[i].append(dictionary[x])

count = 0
for i in range(M - 1):
for j in range(i + 1, M):
if new_space_list[i] == new_space_list[j]:
count += 1

print(count)
[백준] 18870번 좌표 압축

[백준] 18870번 좌표 압축

출처: [백준] 18870번 좌표 압축


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 512 MB 4416 2398 1774 55.042%

문제

수직선 위에 N개의 좌표 X1, X2, …, XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.

Xi를 좌표 압축한 결과 X’i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다.

X1, X2, …, XN에 좌표 압축을 적용한 결과 X’1, X’2, …, X’N를 출력해보자.


입력

첫째 줄에 N이 주어진다.

둘째 줄에는 공백 한 칸으로 구분된 X1, X2, …, XN이 주어진다.


출력

첫째 줄에 X’1, X’2, …, X’N을 공백 한 칸으로 구분해서 출력한다.


제한

  • 1 ≤ N ≤ 1,000,000
  • -109 ≤ Xi ≤ 109

예제 입력 1

1
2
5
2 4 -10 4 -9

예제 출력 1

1
2 3 0 3 1

예제 입력 2

1
2
6
1000 999 1000 999 1000 999

예제 출력 2

1
1 0 1 0 1 0

힌트


출처


알고리즘 분류


시간 제한


풀이


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys

input = sys.stdin.readline

N = int(input())

coord_list = list(map(int, input().split()))
new_list = sorted(list(set(coord_list)))

d = {}
for i in range(len(new_list)):
d[new_list[i]] = i

for i in coord_list:
print(d[i], end=" ")