백준 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

백준 1312번 - 소수 - Python

제목만 보고 소수(1과 자신으로만 나누어 떨어지는 수) 인줄 알았는데, 소수(일의 자리 아래의 숫자)였다 ㅋㅋ ‘소숫점 구하기’ 정도로 제목을 바꾸는게 낫지 않나? n번째 자리 소수점을 구하라는 문제였는데, 바로 나눈다음에 10^n을 곱해서 알아내는 방법도 있겠지만, 자칫 잘못하면 무한소수에 빠질 우려가 있기 때문에 직접 구현했다. 파이썬에서 몫은 // 나머지는 %로 간편히 구할 구 있다는 것에 착안. 10을 곱하고 b로 나누는 과정을 반복해서 알맞은 답을 알아내었다. 실버 V 쉽90000 # 1312 a,b,n = map(int, input().split()) # for i in range(n): a = a%b for i in range(n-1): a *= 10 a = a%b print((a*10)//b)

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

백준 1837번 - 암호제작 - Python

백준 1837번 문제 바로가기 간만에 풀어보기로 한 몸풀기 문제! 그런데 너무 오랜만에 코딩했더니 감이 다 떨어졌다ㅜㅜㅋㅋ 4트만에 성공했다. 허허 다음학기 파이썬 강의 하나 듣는데, 꾸준히 풀어가는 습관 들여야겠90000 KEY IDEA 조건 처리에 대한 센스가 돋보이는 문제였다. 특히 pq 전체를 다 돌지 않고, k까지만 돌린다는게 핵심! 나머지 경우에 대해서는 “GOOD” 판정만 내리면 되니까 굳이 소수를 찾이 않아도 된다. (=탐색 시간을 아낄 수 있다.) Solution 일단 모두 탐색하는 방법을 사용해서 통과할 수 있는지 확인해보았다. Python 같은 경우 big integer에 대해서 걱정할 필요도 없어서 C++과 달리 mod 함수를 따로 만들 필요는 없다. ...

2024-2-13 · 1 min · 147 words · Junha

백준 20529번 - 가장 가까운 세 사람의 심리적 거리 - Python C++

백준 20529번 문제 바로가기 문제 상황 이해 한때 핫했던 MBTI를 활용한 재밌는 문제. MBTI 글자 하나가 다를때마다 거리를 1로 잡고 그 거리의 총합을 구하는 문제다. Keypoint 비둘기집의 원리을 활용해서 if문 작성해주기 MBTI의 총 가짓수가 2^4=16종류이기 때문에 33명 이상이면 반드시 3명은 같은 MBTI를 가진다 def distance(case): temp = 0 for i in range(3): for j in range(4): if case[i%3][j] != case[(i+1)%3][j]: temp += 1 return temp n_test = int(input()) for i in range(n_test): n_friend = int(input()) mbti = input().split() if n_friend >= 33: print(0) else: min_distance = 20 for x in range(n_friend-2): for y in range(x+1, n_friend-1): for z in range(y+1, n_friend): d = distance([mbti[x], mbti[y], mbti[z]]) if d < min_distance: min_distance = d print(min_distance) #include <iostream> #include <string> using namespace std; int distance(string a, string b, string c){ int temp = 0; for (int i=0; i<4; i++){ if (a[i] != b[i]){ temp++; } if (b[i] != c[i]){ temp++; } if (c[i] != a[i]){ temp++; } } return temp; } int main() { int n_test, n_friend; string name; string mbti[100000]; cin >> n_test; for (int i=0; i<n_test; i++){ int d, min_distance = 20; cin >> n_friend; for (int j=0; j<n_friend; j++){ cin >> name; mbti[j] = name; } if (n_friend >= 33){ cout << 0 << endl; } else { for (int x=0; x<n_friend-2; x++){ for (int y=x+1; y<n_friend-1; y++){ for (int z=y+1; z<n_friend; z++){ d = distance(mbti[x], mbti[y], mbti[z]); if (d < min_distance){ min_distance = d; } } } } cout << min_distance << endl; } } }

2023-12-22 · 2 min · 248 words · Junha