[프로그래머스] Lv1.완주하지 못한 선수

[프로그래머스] Lv1.완주하지 못한 선수

출처: [코딩테스트 연습 완주하지 못한 선수]


문제

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.


제한

  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

입출력

participant completion return
[“leo”, “kiki”, “eden”] [“eden”, “kiki”] “leo”
[“marina”, “josipa”, “nikola”, “vinko”, “filipa”] [“josipa”, “filipa”, “marina”, “nikola”] “vinko”
[“mislav”, “stanko”, “mislav”, “ana”] [“stanko”, “ana”, “mislav”] “mislav”

입출력 예 1

예제 #1
“leo”는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2
“vinko”는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3
“mislav”는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

출처


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from collections import Counter


def solution(participant, completion):
participant.sort()
completion.sort()
answer = Counter(participant) - Counter(completion)
return list(answer)[0]

# print(solution(["marina", "josipa", "nikola", "vinko", "filipa"], ["josipa", "filipa", "marina", "nikola"]))

'''
collection 라이브러리 사용
일반 dict는 빼기 불가,
counter를 사용하면 key, value로 되고...카운터 객체이므로 빼기 가능
마지막 리스트로 변환 후 0번째 출력--> 탈락자는 한명이다
'''
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def solution(participant, completion):
participant.sort()
completion.sort()
for p, c in zip(participant, completion):
if p != c:
return p
return participant[-1]


# print(solution(["marina", "josipa", "nikola", "vinko", "filipa"], ["josipa", "filipa", "marina", "nikola"]))

'''
탈락자는 무조건 한명
참여자 명단의 인덱스와 완주자 명단의 인덱스 값이 다르다면,
그 때, 참여자는 완주자 명단에 없으므로, 반환
----
마지막까지 인덱스 값이 같다면, 참여자 명단 마지막 사람이 완주하지 못한 사람이다.
'''

[백준] 1032번 명령 프롬프트

[백준] 1032번 명령 프롬프트

출처: [백준] 1032번 명령 프롬프트


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 17770 8716 7470 50.740%

문제

시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다.

dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. “dir 패턴”과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.

이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴에는 알파벳과 “.” 그리고 “?”만 넣을 수 있다. 가능하면 ?을 적게 써야 한다. 그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.


입력

첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 알파벳과 “.” 그리고 “?”로만 이루어져 있다.


출력

첫째 줄에 패턴을 출력하면 된다.


예제 입력 1

1
2
3
4
3
config.sys
config.inf
configures

예제 출력 1

1
config????

출처


알고리즘 분류


소스코드

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

input = sys.stdin.readline

N = int(input())
file_list = [list(input().rstrip()) for _ in range(N)]

input_word = file_list[-1]

for i in range(N - 1):
for j in range(len(input_word)):
if input_word[j] == file_list[i][j]:
continue
else:
input_word[j] = '?'

print(''.join(input_word))
[백준] 1100번 하얀 칸

[백준] 1100번 하얀 칸

출처: [백준] 1100번 하얀 칸


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 14533 9611 8429 68.724%

문제

체스판은 8*8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하시오.


입력

첫째 줄부터 8개의 줄에 체스판의 상태가 주어진다. ‘.’은 빈 칸이고, ‘F’는 위에 말이 있는 칸이다.


출력

첫째 줄에 문제의 정답을 출력한다.


예제 입력 1

1
2
3
4
5
6
7
8
.F.F...F
F...F.F.
...F.F.F
F.F...F.
.F...F..
F...F.F.
.F.F.F.F
..FF..F.

예제 출력 1

1
1

출처


알고리즘 분류


소스코드

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

input = sys.stdin.readline
input_board = [list(input().rstrip()) for _ in range(8)]

count = 0
for i in range(8):
for j in range(8):
if (i + j) % 2 == 0:
if input_board[i][j] == 'F':
count += 1

print(count)

[백준] 2743번 단어 길이 재기

[백준] 2743번 단어 길이 재기

출처: [백준] 2743번 단어 길이 재기


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 14281 11663 10225 83.171%

문제

알파벳으로만 이루어진 단어를 입력받아, 그 길이를 출력하는 프로그램을 작성하시오.


입력

첫째 줄에 영어 소문자와 대문자로만 이루어진 단어가 주어진다. 단어의 길이는 최대 100이다.


출력

첫째 줄에 입력으로 주어진 단어의 길이를 출력한다.


예제 입력 1

1
pulljima

예제 출력 1

1
8

출처

  • 데이터를 추가한 사람: 79brue
  • 문제를 만든 사람: baekjoon

알고리즘 분류


소스코드

1
2
3
4
string = input()

print(len(string))

2021년 5월 28일 금요일 IT뉴스

1. 카카오, 음성 커뮤니티 서비스 ‘사운드K(가칭)’ 준비

카카오, 음성 커뮤니티 서비스 ‘사운드K(가칭)’ 준비 : 네이버 뉴스 (naver.com)

27일 업계에 따르면 카카오는 클럽하우스와 닮은꼴인 음성 커뮤니티 서비스 ‘사운드K(가칭)’을 준비 중으로 올 여름 출시로 예상된다.

현재 인터넷 업계에선 음성 커뮤니티 시장에 앞다퉈 주목하는 상황으로 트위터가 음성 채팅이 가능한 ‘스페이스’를 선보였고 올 여름 페이스북이 ‘라이브 오디오룸’ 적용을 예고하는 등 음성으로 사람 간 관계를 맺는 기능이 속속 시험대에 오른다.


2. 네이버·카카오·통신사, ‘전기 먹는→저탄소·친환경’ IDC 구축 전쟁

네이버·카카오·통신사, ‘전기 먹는→저탄소·친환경’ IDC 구축 전쟁 : 네이버 뉴스 (naver.com)

최근 공공과 기업의 디지털전환이 가속화되면서 통신3사와 네이버, 카카오 등 IT기업들이 ‘친환경’ 인터넷데이터센터(IDC) 경쟁에 뛰어들었고, IDC 선점 경쟁은 최근 사물인터넷(IoT), 인공지능(AI) 등 데이터 처리 시장이 성장하고, 공용 클라우드 수요 증가로 데이터 센터 중요성 확대되고 있기 때문으로 풀이된다.

IDC 전력 소모량 상당해 ‘탄소 배출’ 부담 커져…친환경 노력 각양각색

  • KT의 용산 IDC는 냉수식 항온기, 냉수식 프리쿨링과 더불어 냉각팬, 인버터 방식의 고효율 설비를 갖춰 냉방용 전력비를 기존 대비 20% 이상 절감
  • LG유플러스는 지난 12일 1분기 실적발표 컨퍼런스 콜에서 경기도 안양 신규 IDC와 관련 친환경 설비를 강화할 것이란 계획
  • 네이버는 외부 경관 조명과 온실 난방에 태양광 및 태양열 발전을 이용하고, 차가운 공기와 지하수를 이용해 서버를 식히는 친환경 기술인 AMU(Air Misting Unit) 및 NAMU(NAVER Air Membrane Unit) 개발을 통한 자연 냉각 시스템을 활용
  • 카카오가 2023년 준공 예정인 안산 데이터센터는 설계 단계에서부터 친환경 요소를 적용했다. 친환경 설계로 에너지효율등급 1등급을 획득하고, 재생에너지 인프라를 구축하고 냉각 전력 효율 향상을 위한 설비를 적용할 예정

3. 카카오엔터, 아이앤아이소프트 250억에 인수

카카오엔터, 아이앤아이소프트 250억에 인수 : 네이버 뉴스 (naver.com)

27일 업계에 따르면, 카카오엔터는 아이앤아이소프트 지분 100%를 250억원에 인수한 것으로 알려졌다.

카카오엔터 관계자는 “현재 회사는 카카오TV에 오리지널(자체) 영상 콘텐츠를 올리는 등 영상 사업을 하고 있다”라면서 “아이앤아이소프트의 기술을 이런 사업에 적용할 수 있을 것”이라고 기대했다.

  • 아이앤아이소프트는 미디어 스트리밍을 위한 솔루션·서비스를 개발, 통신사, 온라인동영상서비스(OTT) 등에 공급하고 있다. DRM(디지털 콘텐츠 저작권 보호 기술) 기술도 갖고 있는 것으로 알려졌다.

4. 도마 오른 ‘포털 알고리즘 공정성’…“투명하게 공개” “남용 우려”

도마 오른 ‘포털 알고리즘 공정성’…“투명하게 공개” “남용 우려” : 네이버 뉴스 (naver.com)

◆ 전문가들, 알고리즘 투명성 위한 규제 필요성 공감

  • 이날 전문가들은 알고리즘의 투명성을 위한 규제 필요성에 대해 공감하면서도 기술적 자율성 보장과 사회적 합의가 선행되어야 한다는 의견을 냈다.
  • 최경진 교수는 “알고리즘은 도구일 뿐이라는 가치중립적 시각과, 알고리즘은 사람의 설계에 따라 다른 결과를 낼 수 있는 가치내재성이 있다는 시각이 있다”고 소개하며 “가치 중립성 차원에서는 자율성을 보장해야 하지만, 한편 가치내재적 측면에서는 투명성을 확보해야 하므로 두가지를 모두 고려한 입법 노력이 필요하다”고 지적했다.

◆ “알고리즘 검증 필요하나, 남용 가능성도 고려해야”

  • 알고리즘 공개 범위에 대해서도 뚜렷한 결론을 내지 못했다. 최경진 교수는 “실제 검증 과정에서 나온 데이터를 일반에 공개하는 게 바람직하냐고 했을 때, 검증은 필요하나 자칫 남용 가능성도 있다는 점을 고려해야 한다”고 제언했다.

  • 김동원 언론노조 정책실장은 “저널리스트나 일반 학자들, 이용자들이 이용할 수 있을 정도 수준의 투명성 보고서를 포털이 제출했으면 좋겠다”면서 “현재 뉴스 배열 알고리즘으로는 심층 기사나 좋은 기사를 솎아낼 수 없다는 한계를 네이버와 카카오가 인정할 필요가 있다”고 말했다.

◆ 네이버·카카오 “자율적인 알고리즘 검증 시행 중”

  • 최재호 네이버 이사는 “앞서 언론학·컴퓨터공학 교수님들 모시고 최초로 알고리즘 검증을 시행한 바 있다”며 6개월간의 분석 끝에 알고리즘에 인위적 개입은 불가능하다는 결론을 냈다.
  • 김희정 카카오 실장은 알고리즘 공개와 관련한 논의들이 사회적 합의를 이룬다면 적극 검토하겠다”고 밝혔다.

[백준] 2563번 색종이

[백준] 2563번 색종이

출처: [백준] 2563번 색종이


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 9793 6870 5908 71.327%

문제

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.

img

예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.


입력

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다


출력

첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.


예제 입력 1

1
2
3
4
3
3 7
15 7
5 2

예제 출력 1

1
260

출처


알고리즘 분류


소스코드

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

papers = [[0 for _ in range(101)] for _ in range(101)]

N = int(input())
for _ in range(N):
x, y = map(int, input().split())
for i in range(x, x + 10):
for j in range(y, y + 10):
papers[j][i] = 1

result = 0
for row in papers:
result += row.count(1)

print(result)

[백준] 9375번 패션왕 신해빈

[백준] 9375번 패션왕 신해빈

출처: [백준] 9375번 패션왕 신해빈


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 8972 4744 4148 54.350%

문제

해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까?


입력

첫째 줄에 테스트 케이스가 주어진다. 테스트 케이스는 최대 100이다.

  • 각 테스트 케이스의 첫째 줄에는 해빈이가 가진 의상의 수 n(0 ≤ n ≤ 30)이 주어진다.
  • 다음 n개에는 해빈이가 가진 의상의 이름과 의상의 종류가 공백으로 구분되어 주어진다. 같은 종류의 의상은 하나만 입을 수 있다.

모든 문자열은 1이상 20이하의 알파벳 소문자로 이루어져있으며 같은 이름을 가진 의상은 존재하지 않는다.


출력

각 테스트 케이스에 대해 해빈이가 알몸이 아닌 상태로 의상을 입을 수 있는 경우를 출력하시오.


예제 입력 1

1
2
3
4
5
6
7
8
9
2
3
hat headgear
sunglasses eyewear
turban headgear
3
mask face
sunglasses face
makeup face

예제 출력 1

1
2
5
3

힌트

첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.


출처


알고리즘 분류


소스코드

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

input = sys.stdin.readline

T = int(input())

for _ in range(T):
clothes = {}
N = int(input())
for _ in range(N):
name, kind = input().split()
if kind in clothes:
clothes[kind] += 1
else:
clothes[kind] = 1

case = 1
for key in clothes.keys():
case = case * (clothes[key] + 1)
print(case - 1)

[백준] 10808번 알파벳 개수

[백준] 10808번 알파벳 개수

출처: [백준] 10808번 알파벳 개수


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 256 MB 18151 12517 10446 69.850%

문제

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각 알파벳이 단어에 몇 개가 포함되어 있는지 구하는 프로그램을 작성하시오.


입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.


출력

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.


예제 입력 1

1
baekjoon

예제 출력 1

1
1 1 0 0 1 0 0 0 0 1 1 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0

출처

  • 문제를 만든 사람: baekjoon
  • 잘못된 데이터를 찾은 사람: djm03178
  • 문제의 오타를 찾은 사람: eric00513

알고리즘 분류


소스코드

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

input = sys.stdin.readline

string = list(input().rstrip())

alpha_count = {}
for i in range(ord('z') - ord('a') + 1):
alpha_count[chr(ord('a') + i)] = 0

for alphabet in string:
alpha_count[alphabet] += 1

print(*list(alpha_count.values()))

[백준] 15652번 N과 M (4)

[백준] 15652번 N과 M (4)

출처: [백준] 15652번 N과 M (4)


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 512 MB 16829 13474 10961 80.224%

문제

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 M개를 고른 수열
  • 같은 수를 여러 번 골라도 된다.
  • 고른 수열은 비내림차순이어야 한다.
    • 길이가 K인 수열 A가 A1 ≤ A2 ≤ … ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.

입력

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)


출력

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

수열은 사전 순으로 증가하는 순서로 출력해야 한다.


예제 입력 1

1
3 1

예제 출력 1

1
2
3
1
2
3

예제 입력 2

1
4 2

예제 출력 2

1
2
3
4
5
6
7
8
9
10
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
3 4
4 4

예제 입력 3

1
3 3

예제 출력 3

1
2
3
4
5
6
7
8
9
10
1 1 1
1 1 2
1 1 3
1 2 2
1 2 3
1 3 3
2 2 2
2 2 3
2 3 3
3 3 3

출처


알고리즘 분류


소스코드

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

input = sys.stdin.readline

N, M = map(int, input().split())
result = []


def dfs(idx, depth):
if depth == M:
print(*result)
return
for i in range(idx, N):
result.append(i + 1)
dfs(i, depth + 1)
result.pop()


dfs(0, 0)

[백준] 10845번 큐

[백준] 10845번 큐

출처: [백준] 10845번 큐


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
0.5 초 (추가 시간 없음) 256 MB 52286 24664 19014 48.962%

문제

정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여섯 가지이다.

  • push X: 정수 X를 큐에 넣는 연산이다.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 큐에 들어있는 정수의 개수를 출력한다.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
  • front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.


출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.


예제 입력 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front

예제 출력 1

1
2
3
4
5
6
7
8
9
10
11
12
1
2
2
0
1
2
-1
0
1
-1
0
3

출처


알고리즘 분류


소스코드

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
import sys
from collections import deque

input = sys.stdin.readline
N = int(input())
q = deque([])
for _ in range(N):
command = input().split()
if command[0] == 'push':
q.append(command[1])
elif command[0] == 'pop':
if not q:
print(-1)
else:
print(q.popleft())
elif command[0] == 'size':
print(len(q))
elif command[0] == 'empty':
if not q:
print(1)
else:
print(0)
elif command[0] == 'front':
if not q:
print(-1)
else:
print(q[0])
elif command[0] == 'back':
if not q:
print(-1)
else:
print(q[-1])