백준 1380번 - 귀걸이 - Python

생각보다는 따져야 할게 많았던 문제. 마지막에 자꾸만 오류가 나길래 문제를 다시 봤더니 귀걸이를 잃어버린 학생의 index가 아닌, 시나리오 숫자를 출력하는 것이었다.. 코딩 문제를 풀 때에 꼭 문제를 자세히 보자…! # 1380 scenario_num = 1 while True: n = int(input()) if n == 0: break names = [] earings = ['']*n count = 0 for i in range(n): names.append(input()) for i in range(2*n-1): index, ab = input().split() earings[int(index)-1] += ab if ab == 'A': count += 1 else: count -= 1 if count == 1: k = earings.index('A') print(scenario_num, names[k]) else: k = earings.index('B') print(scenario_num, names[k]) scenario_num += 1 exit(0)

2024-8-13 · 1 min · 99 words · Junha

백준 1268번 - 임시 반장 정하기 - Python

문제 자체가 처음엔 이해가 잘 안되었는데, 다시 차근차근 읽어보니 개인별로 같은반 해본 친구들의 수를 세는 비교적 단순한 과제였다. 일단 spacebar로 구분된 input을 int로 바꾸어 school에 저장해두고, 개인별 친구수를 저장하는 student list을 만든다. 반복구문을 돌리면서 반이 겹치는 학생 두 쌍에 각각 +1 점수를 부여해간다. 최종적으로 가장 인싸만 골라내면 되니까 max로 최댓값을 알아낸 뒤에 index을 써서 몇번 학생인지 알아낸다. 동률의 경우 최솟값을 구하라고 했는데, 기본적으로 python index는 낮은 값을 리턴해주기 때문에 그대로 두면 된다. 만일 최댓값을 구하라고 했다면, max에 해당하는 index를 구해둔 뒤에 최댓값을 구하는 과정을 한 번 더 거쳐주면 된다. ...

2024-8-12 · 1 min · 133 words · Junha

백준 1475번 - 방 번호 - C++ Python

백준 1475번 문제 바로가기 서론 0~9까지 숫자 세트가 있고, 특정 숫자를 나타내기 위해서 숫자 세트가 몇 개 필요한지 구하는 문제. 여기까지만 주어지면 브론즈 정도의 문제이겠지만, 6과 9는 회전하여 상호 호환 가능하다는 조건이 달아져서 실버 등급이 매겨져있다. 본론 주어진 숫자를 하나씩 받기 위해서 strstream을 사용해도 되겠지만, 그냥 10으로 나눈 몫과 나머지를 이용해서 ‘일의 자리’에서부터 차례대로 숫자를 불러와서 사용했다. 6, 9의 경우 서로 호환 가능해서 2로 나눈 값을 반올림해야했는데, round 관련 함수가 생각나지 않아서 그냥 2로 나눈 몫과 나머지의 합으로 구했다. vec에 각 숫자들의 갯수를 구하고, 최댓값이 곧 숫자 세트의 갯수다 라는 논리로 해결했다. 결론 자동차에 전화번호 남기는 숫자 세트랑 비슷해서 응용해서 다른 문제를 만들수도 있을 듯 하다. (e.g 010-xxxx-xxxx을 만들기 위해 필요한 숫자 세트의 갯수는?) (e.g 숫자 세트 4개를 이용하여 만들 수 있는 숫자의 경우의 수는?) ...

2023-11-29 · 1 min · 193 words · Junha

백준 1308번 - D-Day - C++

백준 1308번 문제 바로가기 프로그래밍 언어를 배우고나면 한번쯤 만들어보는 dday 프로그램. python같은 경우엔 datetime 모듈을 import해서 금방 불러오겠지만, C++는 그런 모듈이 딱히 없어보여서 그냥 구현하기로 했다. 특정 날짜를 기준으로 잡고 차이를 여러개 구해서 빼주는게 비교적 간단하다. #include <iostream> #include <vector> using namespace std; int cal(int y, int m, int d) { vector<int> mth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int temp=0; if (!(y % 4) && y % 100 || !(y % 400)){ mth[1]++; } for (int i=0; i<m-1; i++){ temp += mth[i]; } return (y-1)*365 + temp + (d-1) + ((y-1)/4 - (y-1)/100 + (y-1)/400); } int main() { int y1, m1, d1, y2, m2, d2, dday; cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2; dday = cal(y2, m2, d2) - cal(y1, m1, d1); if (y2 - y1 > 1000 || (y2 - y1 == 1000 && (m1 < m2 || (m1 == m2 && d1 <= d2)))){ cout << "gg"; } else{ cout << "D-" << dday; } }

2023-11-16 · 1 min · 173 words · Junha

프로그래머스 - 삼총사 - C++

프로그래머스 삼총사 문제 바로가기 간만에 푼 코딩테스트 문제. 문제 조건에 따라서 3개씩 뽑아 삼총사의 조건(세 수의 합이 0)을 만족하는지 확인해주면 간단히 해결 가능하다. Python의 경우 collections의 combination을 이용해 sum이 0인지 확인하면 더 편할듯하다. (메모리 초과는 차치해두면) #include <string> #include <vector> using namespace std; int solution(vector<int> number) { int answer = 0; for (int i=0; i<number.size()-2; i++){ for (int j=i+1; j<number.size()-1; j++){ for (int k=j+1; k<number.size(); k++){ if (number[i] + number[j] + number[k] == 0){ answer++; } } } } return answer; }

2023-11-11 · 1 min · 82 words · Junha